python3 中正则表达式中遇到的问题

分组命名

我们知道在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)#结果:['你好', '世界']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值