正则表达式 Python 未返回期望的结果

Regex Python Not Returning Desired Outcome

您好,我有一个脚本可以通过一系列正则表达式的数字记事本。除了一些未正确显示的值外,我的正则表达式正在运行。 例如一些数字示例,如 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 返回。我哪里错了?

它匹配 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