【问题标题】:RegEx match word in string containing + and - using re.findall() Python正则表达式匹配包含 + 和 - 的字符串中的单词,使用 re.findall() Python
【发布时间】:2026-01-12 23:00:02
【问题描述】:

myreg = r"\babcb\"

mystr = "sdf ddabc"

mystr1 = "sdf abc"

print(re.findall(myreg,mystr))=[]

print(re.findall(myreg,mystr1))=[abc]

到目前为止,一切都按预期工作,但如果我将我的 reg 和我的 str 更改为。

myreg = r"\b\+abcb\"

mystr = "sdf +abc"

print(re.findall(myreg,mystr)) = [] but i would like to get [+abc]

我注意到使用以下内容可以按预期工作。

   myreg = "^\\+abc$"

   mystr = "+abc"   

   mystr1 = "-+abc"

我的问题:是否可以在不拆分字符串的情况下达到与上述相同的结果?

最好的问候,

加布里埃尔

【问题讨论】:

    标签: python regex non-alphanumeric


    【解决方案1】:

    您的问题如下:

    • \b 定义为\w\W 字符之间的边界 (或相反亦然)。
    • \w 包含字符集 [a-zA-Z0-9_]
    • \W 包含字符集[^a-zA-Z0-9_],表示除[a-zA-Z0-9_] 之外的所有字符

    '+' 不包含在\w 中,因此您不会匹配空格和'+' 之间的边界。

    要得到你想要的,你应该从你的模式中删除第一个\b

    import re
    
    string = "sdf +abc"
    pattern = r"\+abc\b"
    matches = re.findall(pattern, string)
    
    print matches
    ['+abc']
    

    【讨论】:

      【解决方案2】:

      有两个问题

      1. +abc中的+之前没有字边界,所以\b不能匹配。
      2. 您的正则表达式\b\+abcb\ 尝试匹配abc 之后的文字b 字符(错字)。

      字边界

      单词边界\b 匹配单词字符(字母、数字和下划线)和非单词字符(或行开头或结尾)之间的位置。例如,+a 之间存在单词边界

      解决方案:制定自己的边界

      如果您想匹配+abc,但前提是它前面没有单词字符(例如,您不希望它在def+abc 内),那么您可以通过后视来创建自己的边界:

      (?<!\w)\+abc
      

      这表示“如果+abc 前面没有单词字符(字母、数字、下划线),则匹配”。

      【讨论】:

        最近更新 更多