0

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"

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

此致,

加布里埃尔

4

2 回答 2

0

有两个问题

  1. 在您的+in之前+abc,没有单词边界,因此\b无法匹配。
  2. 您的正则表达式\b\+abcb\尝试匹配(错字)b之后的文字字符。abc

词边界

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

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

如果您想匹配+abc但仅当它前面没有单词字符时(例如,您不希望它在里面def+abc),那么您可以通过后视来制作自己的边界:

(?<!\w)\+abc

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

于 2014-06-13T23:06:30.207 回答
0

您的问题如下:

  • \b\w被定义为 a和字符之间的边界\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']
于 2014-06-13T23:06:41.513 回答