注意:我正在使用PyPi替代正则表达式模块
我有一个python程序,我在其中查找以逗号分隔的特定格式的重复标签。
格式为:(*单词... *#*数字*)
例如:Trial #1, Trial #2, Run #3,
和Spring trial #13
都适合格式。
我正在使用:([\w ]*#\d\d?,)\1*
以原始字符串作为我的正则表达式模式。
在Java和各种正则表达式测试引擎中,findall()
在字符串上使用以下模式:
运行#1,运行#1,运行#1,运行#1,运行#1,运行#1,运行#1,运行#2,运行#2,运行#2,运行#2,运行#2,运行# 2,运行#2,运行#3,运行#3,运行#3,运行#3,运行#3,运行#3,运行#3,(...
...)运行#20,运行#20,运行#20,运行#20,运行#20,运行#20,运行#20
返回:
匹配1:运行#1,运行#1,运行#1,运行#1,运行#1,运行#1,运行#1,
比赛2:运行#2,运行#2,运行#2,运行#2,运行#2,运行#2,运行#2,
...等等。
但在python中,它返回:
比赛1:运行#1,
比赛2:运行#2,
...等等。
我希望它返回第一个结果(由Java和其他程序的正则表达式返回的结果)
关于python的regex引擎,我是否有什么忽略的地方?为什么我得到这个结果?
我的代码是:
import regex
file = open('Pendulum Data.csv',mode='r')
header1 = file.readline()
header2 = file.readline()
pattern1 = regex.compile(r'([\w ]*#\d\d?)\1*',flags=regex.V0)
header1Match = pattern1.findall(header1)
for x in header1Match:
print(x)
for循环和print语句用于查看结果。
(这使我想到了另一个问题:regex.findall()
返回的确切内容是findall()
什么?我只是在打印错误的结果时返回想要的内容?)
...是的,我在模式中使用了原始字符串。
您正在正则表达式中使用捕获组。.finall
如果在模式中指定了捕获组,Python将返回捕获文本的元组。因此,您正在寻找一种.finditer
功能。
返回一个迭代器,该迭代器在string的RE模式的所有非重叠匹配上产生MatchObject实例。该字符串被扫描的左到右,而比赛的顺序返回找到。空匹配项将包括在结果中,除非它们碰到另一个匹配项的开头。
以string列表形式返回string中pattern的所有非重叠匹配项。该字符串被扫描的左到右,而比赛的顺序返回找到。如果模式中存在一个或多个组,则返回一个组列表;否则,返回一个列表。如果模式包含多个组,则这将是一个元组列表。
这是一个使用的小演示re.finditer
:
import re
p = re.compile(r'([\w ]*#\d\d?,)\1*')
test_str = "Run #1,Run #1,Run #1,Run #1,Run #1,Run #1,Run #1,Run #2,Run #2,Run #2,Run #2,Run #2,Run #2,Run #2,Run #3,Run #3,Run #3,Run #3,Run #3,Run #3,Run #3, (..."
print [x.group() for x in p.finditer(test_str)]
结果:
['Run #1,Run #1,Run #1,Run #1,Run #1,Run #1,Run #1,', 'Run #2,Run #2,Run #2,Run #2,Run #2,Run #2,Run #2,', 'Run #3,Run #3,Run #3,Run #3,Run #3,Run #3,Run #3,']
卡西米尔(Casimir)是对的,有了这样琐碎的常规规则,您可以使用常规re
模块。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句