Я изучаю регулярные выражения и имею под вопросом.
Я сослался на страницу и получил информацию ниже
\b Соответствует пустой строке, но только в начале или конце слова. Слово определяется как последовательность буквенно-цифровых символов или символов подчеркивания, поэтому конец слова обозначается пробелом или буквенным или несимвольным символом. Обратите внимание, что формально \b определяется как граница между символом \w и a\W (или наоборот) или между \w и началом/концом строки, поэтому точный набор символов, считающийся буквенно-цифровым, зависит от по значениям флагов UNICODE и LOCALE. Например, r '\ bfoo\b' соответствует 'foo', 'foo.', '(Foo)', 'bar foo baz', но не 'foobar' или 'foo3'. Внутри диапазона символов \b представляет символ обратного пробела для совместимости с строковыми литералами Pythons.
Код:
import re
abc="A \ncat and a rat"+ "\ncan't be friends."
print (abc)
if re.search(r'\bcat\b',abc):
print ("Found")
else:
print ("not found")
Я хотел бы найти все случаи, когда должно быть либо число, либо пробел до и после моей строки.
Поэтому '1cat4'
, 'cat'
, '1cat '
, ' cat '
, '(cat)'
должны возвращаться положительно, когда я ищу 'cat'
.
Как мне обновить код?
Похоже, вы хотите найти любого кота, окруженного неалфавитными символами или в начале или конце текста:
abc="cat. A \ncat and a rat\ncan't be friends, how about 1cat23 and concatenate?"
re.findall(r'(?:[^a-zA-Z]|^)(cat)(?:[^a-zA-Z]|$)',abc)
#['cat', 'cat', 'cat']
Вот контексты найденных кошек:
re.findall(r'(?:[^a-zA-Z]|^)cat(?:[^a-zA-Z]|$)',abc)
#['cat.', '\ncat ', '1cat2']
К сожалению, это регулярное выражение не распознает стада кошек ("catcat", "cat cat" и т.п.). Если это проблема, вы можете добавить дополнительные предложения в регулярное выражение.
'cat'
и'(cat)'
совпали? Там нет ни чисел, ни пробелов до и послеcat
.'cat' in str_
если вы просто хотите'cat' in str_
соответствие, если следующий содержит вашу специальную строку. Не похоже, что есть строгие критерии, приведенные в примере с «(кошкой)».