我敢肯定,如果有解决方案,那么它就在某个地方,但我找不到。我一直遵循Python正则表达式来匹配特定的单词,并且在第一个方面取得了成功,但现在在第二个方面苦苦挣扎。
我继承了一种可怕的文件格式,其中每个测试结果都单独显示。每个记录只能将其限制为12个字符,因此某些结果会分成几行,例如SITE,SITE1和SITE2。我正在尝试将文件解析为字典,以便可以对其进行更多分析,最终生成格式化的报告。
上面的链接/下面的代码允许我匹配每个SITE并将它们连接在一起,但是这给我正确匹配INS,INS 1和INS 2带来了问题。是的,空间是故意的-它是我必须处理的。INS是测试结果,而INS 1是通过测试的极限。
是否有匹配的正则表达式
SITE> SITE True,但SITE> SITE1 false
和
INS> INS True,但是INS至INS 1否?
这是python代码。
import re
lines = ['SITE start', 'SITE1 more', 'SITE2 end','INS value1', 'INS 1 value2']
headings = ['SITE','SITE1',"SITE2", "INS", "INS 1"]
for line in lines:
for heading in headings:
headregex = r"\b" + heading + r"\b"
match = re.search(headregex,heading)
if match:
print "Found " + heading + " " + line
else:
print "Not Found " + heading + " " + line
这是一些虚拟数据:
TEST MODE 131 AUTO SITE startaddy SITE1 middle addy SITE2 end addy
USER DB VISUAL CHECK P BOND RANGE 25A EARTH 0.09 OHM P LIMIT 0.10 OHM INS 500 V INS 1 >299 MEG P ... TEST MODE 231 AUTO SITE startaddy SITE1 middle addy SITE2 end addy USER DB VISUAL CHECK P INS 500 V INS 2 >299 MEG P ...
很抱歉使用可怕的格式-它是从我正在处理的内容中复制并粘贴的!
问题是INS
模式在INS
inINS 1
或INS 2
etc中找到部分匹配项。
在提取替代项的情况下,习惯上使用以最长值开头的替代项(例如INS \d+|INS
),但是在这种情况下,您希望获取所有正则表达式匹配项的列表,仅排除一些重叠的标题匹配项。
为此,有一种方法可以通过将所有标题项视为正则表达式来排除该匹配项,并定义INS
模式INS(?! \d)
以确保INS
在其后跟空格和数字时不匹配。
参见Python演示:
import re
lines = ['SITE start', 'SITE1 more', 'SITE2 end','INS value1', 'INS 1 value2']
headings = ['SITE','SITE1',"SITE2", r"INS(?! \d)", "INS 1"]
headings=sorted(headings, key=lambda x: len(x), reverse=True)
for line in lines:
print("----")
for heading in headings:
headregex = r"\b{}\b".format(heading)
match = re.search(headregex,heading)
if match:
print "Found " + heading + " " + line
else:
print "Not Found " + heading + " " + line
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句