字符串前后的Python正则表达式数字或空格

时间:2018-08-22 00:46:45

标签: python regex

我正在学习正则表达式,并且有以下疑问。

我提到了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'应该返回正值。

我应该如何更新我的代码?

1 个答案:

答案 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”等)。如果这是一个问题,则可以在正则表达式中添加更多子句。