Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式Python未返回所需的结果_Python_Regex_Text_Expression_Notepad - Fatal编程技术网

正则表达式Python未返回所需的结果

正则表达式Python未返回所需的结果,python,regex,text,expression,notepad,Python,Regex,Text,Expression,Notepad,嗨,我有一个脚本,通过一系列正则表达式的数字记事本。我的正则表达式正在工作,但有几个值没有正确显示。 例如,一些数字示例,如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}

嗨,我有一个脚本,通过一系列正则表达式的数字记事本。我的正则表达式正在工作,但有几个值没有正确显示。 例如,一些数字示例,如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是一个字母,它们只能作为XXXXX或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}

您可以将替换视为:

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

您正在搜索
\d{4,9}
之前的
'd{4,5}-\w{1}\d{2}
\d{4}-\w\d{1}\w
。检查是否将其切换为
\d{4,5}-\d{2,3}-\w{3}\d-\d{2}\d{4,5}-\w{1}\d{2}\b{4}-\w\d{1}\d{4,9}
解决了您的问题