2015-04-21 29 views
1

我正试图解决文本匹配问题,我试图找到产品清单之间的匹配,没有错误的匹配。行进是通过文本相似性完成的。问题是假设我在一个列表中有"product G1234",另一个列表中有"product G1",这两个元素的所有其他功能都是相同的。 python中的string operatorin在这里不是一个好的选择,因为它匹配这两个产品(它不应该),任何人都有任何建议吗?如何区分子字符串和精确的单词?

+2

使用正则表达式,而不是 – sshashank124

+1

检查EOL和空间? –

+1

'in'不是一个字符串函数,它是一个运算符。 – TigerhawkT3

回答

5

使用正则表达式使用字边界\b做一个确切的词匹配。 \b匹配单词字符和非单词字符(反之亦然)。在这里你不能使用split,因为你想检查的子串在中间包含一个空格。

\bsub_string\b 

例子:

>>> re.search(r'\bproduct G1\b', "product G1234") 
>>> re.search(r'\bproduct G1\b', "product G1") 
<_sre.SRE_Match object; span=(0, 10), match='product G1'> 
>>> 

OR

>>> re.search(r'(?<!\S)product G1(?!\S)', "product G1") 
<_sre.SRE_Match object; span=(0, 10), match='product G1'> 
>>> re.search(r'(?<!\S)product G1(?!\S)', "product G1234") 
>>> 
+1

感谢您的回答,这有效。但是你知道re.search算法的效率吗?似乎需要一段时间,当我处理兆字节的文本文件时,我没有选择使用耗时的算法 – user4103576

+1

只需遍历每行,然后将上面的正则表达式应用于每一行。我建议你使用're.search',因为're.match'会尝试匹配从头开始的输入行。 –

+0

如果搜索词是一个迭代器,例如'for i in Dictionary:if re.search('\\ b'+ i +'\\ b',line):print(i,'\ t',line)那是对的吗?似乎为我工作,只是想知道是否有更好的方法。 –

相关问题