正则表达式匹配字符串中的特定单词,但不包括索引版本

戴维斯-巴纳德

我敢肯定,如果有解决方案,那么它就在某个地方,但我找不到。我一直遵循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模式在INSinINS 1INS 2etc中找到部分匹配项

在提取替代项的情况下,习惯上使用以最长值开头的替代项(例如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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在正则表达式中匹配字符串,但不包括JS中的单词字符?

正则表达式匹配大于长度的字符串,但不包括末尾的匹配

正则表达式匹配字符串开头但不包括

正则表达式 - 仅匹配特定单词的字符串

正则表达式匹配以特定单词开头的字符串,后跟数字

段落中的Javascript正则表达式匹配字符串不包括网址

正则表达式在字符串中的任何特定单词之前和之后查找特定单词

正则表达式在字符串中的特定单词之后查找

正则表达式可在Java字符串中查找特定单词

正则表达式在字符串中查找特定单词

正则表达式保留字符串中的特定单词

使用正则表达式从字符串中获取特定单词

在javascript中使用正则表达式查找所有出现但不包括特定字符串的事件

正则表达式帮助-匹配特定的字符串,但不包含在[!foobar!]中

C#正则表达式,匹配但不包括匹配字符串之前的第一个字符

正则表达式:匹配行尾的单词但不包括 X

捕获包含2个特定单词的字符串的正则表达式

正则表达式在特定单词处拆分字符串

正则表达式以匹配字符和数字,但不匹配Java中的特定字符串

正则表达式-字符串以任何东西(但不包括东西)开头和结尾

正则表达式,用于查找字符串中的每个单词(不包括定界符之间的单词)

正则表达式,不包括R中的单词

如何通过正则表达式从任何特定单词替换字符串直到字符串末尾?

使用以点开头(不包括双精度)的正则表达式匹配字符串

正则表达式匹配字符串中单词或单词之间的点(可选)

正则表达式匹配左括号和右括号之间的字符串,但如果左括号后有特定单词则不匹配

正则表达式匹配特定单词

正则表达式完全匹配特定单词

使用正则表达式拆分字符串中的单词,但不拆分符号