繁体   English   中英

RegEx使用re.findall()匹配包含+和-的字符串中的单词

[英]RegEx match word in string containing + and - using re.findall() Python

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"

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

最好的祝福,

加布里埃尔

有两个问题

  1. 您之前++abc ,没有单词边界,所以\\b无法比拟的。
  2. 您的正则表达式\\b\\+abcb\\尝试匹配abc (typo)后的文字b字符。

词边界

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

解决方案:设置自己的边界

如果您想匹配+abc但仅当它不带单词字符时才匹配(例如,您不希望它在def+abc ),那么可以在后面加上自己的边界:

(?<!\w)\+abc

这表示“如果不带单词字符(字母,数字,下划线),则匹配+abc ”。

您的问题如下:

  • \\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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM