我正试图解决文本匹配问题,我试图找到产品清单之间的匹配,没有错误的匹配。行进是通过文本相似性完成的。问题是假设我在一个列表中有"product G1234"
,另一个列表中有"product G1"
,这两个元素的所有其他功能都是相同的。 python中的string operator
in
在这里不是一个好的选择,因为它匹配这两个产品(它不应该),任何人都有任何建议吗?如何区分子字符串和精确的单词?
回答
使用正则表达式使用字边界\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")
>>>
感谢您的回答,这有效。但是你知道re.search算法的效率吗?似乎需要一段时间,当我处理兆字节的文本文件时,我没有选择使用耗时的算法 – user4103576
只需遍历每行,然后将上面的正则表达式应用于每一行。我建议你使用're.search',因为're.match'会尝试匹配从头开始的输入行。 –
如果搜索词是一个迭代器,例如'for i in Dictionary:if re.search('\\ b'+ i +'\\ b',line):print(i,'\ t',line)那是对的吗?似乎为我工作,只是想知道是否有更好的方法。 –
- 1. 如何区分单词字符和非单词字符?
- 2. PHP如何更换精确词语的字符串
- 3. 查找单词和分割字符串
- 4. 如何在解析Haskell时正确区分词干字符和文字字符
- 5. 如何区分pltcl中的空字符串和空字符串?
- 6. Flex如何区分大写单词,小写单词和单词?
- 7. 如何区分字符串和整数
- 8. 我如何区分数字字符串和字符串?
- 9. 如何精确替换字符串
- 10. 字符串从单词数组中替换不区分大小写的精确匹配
- 11. 在php中查找子字符串或精确字符串
- 12. 如何确定字符串中的单词是否是双字?
- 13. 如何区分字符串和整数字符串?
- 14. 如何区分SHA1字符串和日期时间字符串?
- 15. 字符串转换句子的单词
- 16. 如何将字符串拆分为单词和Python中的特殊字符?
- 17. 的Makefile如何分割字符串为单个单词?
- 18. 字符串中的子字符串或分词
- 19. 找到确切的单词作为字符串的一部分
- 20. 如何区分captitalize和non captialize单词?
- 21. 如何确保子字符串是部分字符串的一部分?
- 22. 如何通过字符串中的数字分隔单词
- 23. 精确匹配字符串
- 24. 字符串到单词的字符串[]
- 25. 如何获取字符串的单词?
- 26. 区分单精度和双精度
- 27. 如何将正则表达式分割为精确的单词?
- 28. 如何从字符串中去除特定字符和单词
- 29. 如何搜索和替换精确匹配的字符串只
- 30. 搜索列表:仅匹配精确的词/字符串
使用正则表达式,而不是 – sshashank124
检查EOL和空间? –
'in'不是一个字符串函数,它是一个运算符。 – TigerhawkT3