我试图用正则表达式精确地匹配单词,但它并不像我期望的那样工作。这里有一个小的示例代码和数据,我正在尝试使用它。我正在尝试匹配字符串中的c and java单词,如果找到,则返回true。
我正在使用这个正则表达式\\bc\\b|\\bjava\\b,但它也匹配c#,这不是我要找的。它应该只与该单词完全匹配。我如何才能做到这一点?
def match(x):
if re.match('\\bc\\b|\\bjava\\b', x) is not None:
return True
else: return False
print(df)
0 c++ c
1 c# silverlight data-binding
2 c# silverlight data-binding columns
3 jsp jstl
4 java jdbc
Name: tags, dtype: object
df.tags.apply(match)
0 True
1 True
2 True
3 False
4 True
Name: tags, dtype: bool预期输出:
0 True
1 False
2 False
3 False
4 True
Name: tags, dtype: bool发布于 2019-08-29 08:43:27
您可以使用负向后视和负向前视模式来确保每个匹配的关键字前后都没有非空格字符:
(?<!\S)(?:c|java)(?!\S)演示:https://regex101.com/r/GOF8Uo/3
或者,只需将给定的字符串拆分成一个单词列表,并测试您正在查找的关键字集中是否存在任何单词:
def match(x):
return any(w in {'c', 'java'} for w in x.split())https://stackoverflow.com/questions/57701500
复制相似问题