如何让我的正则表达式处理三个由连字符分隔的特定数字?

How do I get my regular expression to work with three specific numbers that are separated by hyphens?

当我有 3 个由连字符分隔的特定数字时,我试图让这个正则表达式起作用。当没有 hyphens.Can 任何人告诉我我可以做些什么来解决这个问题时,正则表达式工作。我尝试了 \d+- 的组合,但没有任何效果。谢谢你。

本例中的数字是 012。我试图让正则表达式匹配 0-1-2 的所有组合。

重新导入

fname = ('regextest.txt')

fh = 打开(fname)

RegEx012 = re.compile(r'\b(?=[1-9]*0)(?=[02-9]*1)(?=[013-9]*2) \d+\b')

我在 fh:

if RegEx012.findall(i):

    print(i)

文件中的数据:

0-1-2

0-1-4

0-2-1

0-4-1

1-0-2

1-0-4

1-2-0

1-4-0

2-0-1

2-1-0

4-0-1

4-0-2

4-1-0

期望结果:

0-1-2
0-2-1
1-0-2
1-2-0
2-0-1
2-1-0

我的理解是,对于给定的字符串,我们要匹配每个大小为 5 的子字符串,它是字符串 '012' 中字符的排列,在第一位和第二位数字之间有一个连字符,并且另一个介于第二和第三位数字之间。

例如,对于字符串:

There are 2-1-0 reasons to buy 1-2-0 dogs, but only 1-2-1 to buy 0-2-1 cats

2-1-01-2-00-2-1(但不是 1-2-1)将被匹配。

可以使用以下正则表达式来完成:

r'\b(([012])-(?!)([012])-(?!|)[012])\b'

Regex demo <¯\_(ツ)_/¯> Python demo

\b            : assert word boundary
(             : begin capture group 1
  ([012])     : match one char in class in capture group 2
  -           : match '-'
  (?!)      : negative lookahead asserts next char does not
                equal the contents of capture group 
  ([012])     : match one char in class in capture group 3
  -           : match '-'
  (?!|)   : negative lookahead asserts next char does not
                equal the contents of capture group 2 or 3
  [012]       : match one char in class
)             : end capture group 1
\b            : assert word boundary

re.findall 需要捕获匹配项的捕获组 1,因为还有其他捕获组。