首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在regex python中精确匹配单词?

如何在regex python中精确匹配单词?
EN

Stack Overflow用户
提问于 2019-08-29 08:24:06
回答 2查看 289关注 0票数 1

我试图用正则表达式精确地匹配单词,但它并不像我期望的那样工作。这里有一个小的示例代码和数据,我正在尝试使用它。我正在尝试匹配字符串中的c and java单词,如果找到,则返回true。

我正在使用这个正则表达式\\bc\\b|\\bjava\\b,但它也匹配c#,这不是我要找的。它应该只与该单词完全匹配。我如何才能做到这一点?

代码语言:javascript
复制
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

预期输出:

代码语言:javascript
复制
0     True
1    False
2    False
3    False
4     True
Name: tags, dtype: bool
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-29 08:43:27

您可以使用负向后视和负向前视模式来确保每个匹配的关键字前后都没有非空格字符:

代码语言:javascript
复制
(?<!\S)(?:c|java)(?!\S)

演示:https://regex101.com/r/GOF8Uo/3

或者,只需将给定的字符串拆分成一个单词列表,并测试您正在查找的关键字集中是否存在任何单词:

代码语言:javascript
复制
def match(x):
    return any(w in {'c', 'java'} for w in x.split())
票数 3
EN

Stack Overflow用户

发布于 2019-08-29 09:06:29

您是否尝试过使用正则表达式测试站点之一,如this onethis one?它们将分析您的正则表达式模式,并准确地解释您实际尝试匹配的内容。还有很多其他的。

我不熟悉python匹配函数,但它似乎将您的输入模式解析为

\bc\b|\bjava\b

它在单词边界处匹配'c‘或'java’。因此,它将在"0“的两端找到”c“,即"1”和"2“的开头,为"3”返回"no match“,并在"4”中匹配“java”,这说明了您的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57701500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档