如何用正则表达式python匹配精确单词?

2024-09-26 22:43:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图匹配确切的词与正则表达式,但它没有工作,因为我期望它是。下面是一个小的示例代码和数据,我正在尝试这个。我正在尝试匹配字符串中的c and java单词,如果找到,则返回true。你知道吗

我正在使用这个regex \\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

Tags: namefalsetruedfdatareturnmatchtags
2条回答

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

(?<!\S)(?:c|java)(?!\S)

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

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

def match(x):
    return any(w in {'c', 'java'} for w in x.split())

您是否尝试过使用regex测试站点,例如this onethis one??他们将分析你的正则表达式模式,并准确地解释你实际上试图匹配什么。还有很多其他的。你知道吗

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

\bc\b |\bjava\b

在单词边界处匹配“c”或“java”。因此,它将在“0”的两端、“1”和“2”的开头找到一个“c”,为“3”返回“no match”,并在“4”中找到与“java”匹配的结果。你知道吗

相关问题 更多 >

    热门问题