我正在学习正则表达式,并且有以下疑问。
我提到了page,并获得了以下信息
\ b匹配空字符串,但仅在a的开头或结尾 字。单词定义为字母数字或下划线序列 字符,因此单词的结尾用空格或a表示 非字母数字,非下划线字符。注意形式上\ b是 定义为\ w和\ W字符之间的边界(或反之 反之亦然),或\ w和字符串的开头/结尾之间,因此 视为字母数字的精确字符集取决于 UNICODE和LOCALE标志的值。例如,r'\ bfoo \ b' 匹配'foo','foo。','(foo)','bar foo baz',但不匹配'foobar'或 'foo3'。在字符范围内,\ b表示退格键 字符,以便与Python的字符串文字兼容。
代码:
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'
应该返回正值。
我应该如何更新我的代码?
答案 0 :(得分:2)
您似乎想找到任何用非字母字符包围的 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']
不幸的是,此正则表达式无法识别 cat 群(“ catcat”,“ cat cat”等)。如果这是一个问题,则可以在正则表达式中添加更多子句。