我正在尝试用正则表达式匹配确切的单词,但是它没有按我期望的那样工作。这是我正在尝试的一个小的示例代码和数据。我试图匹配字符串中的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
分析解答
可以使用负向后查找和负向前查找模式来确保每个匹配的关键字都不会在non-space字符之前或之后:
(?<!\S)(?:c|java)(?!\S)
demo:https://regex101.com/r/GOF8Uo/3
或者,只需将给定的字符串拆分为单词列表,然后测试您要查找的关键字集中是否有单词:
def match(x):
return any(w in {'c', 'java'} for w in x.split())