我正在尝试查看一系列单词并检查它们是否存在于字符串中。我知道有很多选择这样做,比如使用re.search,但我需要区别一些词(即Java与Javascript)
一个例子:
import re
s = 'Some types (python, c++, java, javascript) are examples of programming.'
words = ['python', 'java', 'c++', 'javascript', 'programming']
for w in words:
p = re.search(w, s)
print(p)
>><_sre.SRE_Match object; span=(12, 18), match='python'>
>><_sre.SRE_Match object; span=(20, 24), match='java'>
>><_sre.SRE_Match object; span=(20, 30), match='javascript'>
>><_sre.SRE_Match object; span=(48, 59), match='programming'>
上述工作在一定程度上与Java匹配Javascript。
编辑:这是我的解决方案
for w in words:
regexPart1 = r"\s"
regexPart2 = r"(?:!+|,|\.|\·|;|:|\(|\)|\"|\?+)?\s"
p = re.compile(regexPart1 + re.escape(w) + regexPart2 , re.IGNORECASE)
result = p.search(s)
答案 0 :(得分:1)
您想为正则表达式添加单词边界标记,比如r'/bjavascript/b'
代替'javascript'
。 (另请注意,+
}
c++
此外,迭代匹配的单词缺乏编译正则表达式的潜在效率。将正则表达式合并为一个可能更好:
w = r'\b(?:python|java|c\+\+|javascript|programming)\b'
re.search(w,s)