嗨我有一个脚本可以通过一系列正则表达式来记录数字记事本。我的正则表达式正在使用一些没有正确显示的值的例外。 例如,一些数字示例,例如11111-C00或22222-X01,它们仅作为11111和22222返回,并且不包括“ - ”以及之后发生的事情。我也有一些以格式结尾的案例:数字,字母编号。这两个正则表达式没有给我我想要的结果:d {4,5} - \ w {1} \ d {2}和\ d {4} - \ w \ d {1} \ w
完整代码:
import re
filename = 'Text.txt'
pattern = '\d{4,5}-\d{2,3}|\d{4,9}|\w{3}\d-\d{2}|\d{4,5}-\w{1}\d{2}|\b|\d{4}-\w\d{1}\w'
new_file = []
with open('Text.txt', 'r') as f:
lines = f.readlines()
for line in lines:
match = re.search(pattern, line)
if match:
new_line = match.group() + '\n'
print new_line
new_file.append(new_line)
with open('NewText.txt', 'w') as f:
f.seek(0)
f.writelines(new_file)
所以我的所有正则表达式都正常工作,除了最后2(d {4,5} - \ w {1} \ d {2}和\ d {4} - \ w \ d {1} \ w)对于XXXXX-LXX和XXXXX-LXL等模式,其中X是数字,L是字母,它们仅作为XXXX或XXXXX返回。我哪里错了?
答案 0 :(得分:0)
它与11111
匹配,因为在您的交替中,分支\d{4,9}
首先匹配。将订单更改为:
\d{4,5}-\d{2,3}|\w{3}\d-\d{2}|\d{4,5}-\w{1}\d{2}|\b|\d{4}-\w\d{1}\w|\d{4,9}
请参阅demo
您可以将替换视为:
Input = 11111-C00
Regex = \d{4,5}-\d{2,3}|\w{3}\d-\d{2}|\d{4,9}|\d{4,5}-\w{1}\d{2}|\b|\d{4}-\w\d{1}\w
Does Input matches \d{4,5}-\d{2,3} ? NO, Then,
Does Input matches \w{3}\d-\d{2} ? NO, Then,
Does Input matches \d{4,9} ? YES, Match found, stop looking