[英]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"
我的问题:是否可以在不分割字符串的情况下获得与上述相同的结果?
最好的祝福,
加布里埃尔
有两个问题
+
在+abc
,没有单词边界,所以\\b
无法比拟的。 \\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.