如何让我的正则表达式处理三个由连字符分隔的特定数字?
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-0
、1-2-0
和 0-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,因为还有其他捕获组。
当我有 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-0
、1-2-0
和 0-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,因为还有其他捕获组。