Слово соответствия RegEx в строке, содержащей + и - с использованием 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"
Мой вопрос: возможно ли достичь тех же результатов, что и выше, без разделения строки?
С наилучшими пожеланиями,
Габриель
2 ответа
Есть две проблемы
- Перед вашим
+
в+abc
нет границы слова, поэтому\b
не может соответствовать. - Ваше регулярное выражение
\b\+abcb\
пытается соответствовать буквальномуb
символ послеabc
(опечатка).
Слово Границы
Граница слова \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']