分组命名
我们知道在python正则中,使用小括号可以对内容进行分组,还可以用以下方式进行分组命名。
(?P<name>正则表达式)#name是一个合法的标识符
当然,我们可以在后续的表达式中使用命名的分组,如以下示例所示:
import re
s1='a2c.a2c'
s2='a2c.d2d'
a = re.search(r'(?P<name>\w\d\w)\.(?P=name)', s1).groups()#返回('a2c',),只有一个元素,即只有一个分组
b = re.search(r'(?P<name>\w\d\w)\.(?P=name)', s2).groups()#会报错,因为没有匹配到内容,这是为什么呢?
s1中第二个’a2c’被替换成’d2d’,在使用命名的分组匹配时,P=name所指的规则已经不是’\w\d\w‘, 而是’a2c’,所以无法匹配到s2,所以要求分组内的字符串是一模一样。我猜测是这样的。
匹配中文
中文的 unicode 编码范围 主要在 [u4e00-u9fa5],这里说主要是因为这个范围并不完整,比如没有包括全角(中文)标点,不过,在大部分情况下,应该是够用的。
import re
title = '你好,hello,世界'
pattern = re.compile(r'[\u4e00-\u9fa5]+')
result = pattern.findall(title)
print(result)#结果:['你好', '世界']