如何使用正则匹配整个字符串?



如何使用正则匹配整个字符串?Python的re模块提供了这种实现:

re.fullmatch(pattern, string, flags=0)

re.search()re.match()方法不同,re.fullmatch()方法要求整个字符串与模式完全匹配,如果匹配,则返回match对象,否则返回None

以下是多种情况的使用示例:

import re

s1 = 'MENA_10'
s2 = 'MENA_10a'
s3 = '(G311; G310)'
s4 = '(G311); (G310)'

1) 匹配整个字符串以大写字母数字下划线组成(开头和结尾)

print(True if re.fullmatch('^[A-Z0-9_]+$', s1) else False)  # True
print(re.fullmatch('^[A-Z0-9_]+$', s1).group(0))            # MENA_10

如果是s2这样的字符串,可以使用如下2)3)方式:

2) 使用flags=re.IGNORECASE忽略字符串中的大小写进行匹配

print(True if re.fullmatch('^[A-Z0-9_]+$', s2, flags=re.IGNORECASE) else False)  # True
print(re.fullmatch('^[A-Z0-9_]+$', s2, flags=re.IGNORECASE).group(0))            # MENA_10a

3) 匹配整个字符串以大写字母开头,以小写字母或数字结尾,中间任意

print(True if re.fullmatch('^[A-Z].*[a-z0-9]$', s2) else False)  # True
print(re.fullmatch('^[A-Z].*[a-z0-9]$', s2).group(0))            # MENA_10a

如果字符串比较特殊,例如像s3s4这样首尾包含括号的字符串,可以使用如下方式:

4) 匹配整个字符串以()结尾,()中固定元字符为大写字母、任意0或多个字符、数字

print(True if re.fullmatch('\\([A-Z]+.*[0-9]+\\)', s3) else False)  # True
print(re.fullmatch('\\([A-Z]+.*[0-9]+\\)', s3).group(0))            # (G311; G310)

print(True if re.fullmatch('\\([A-Z]+.*[0-9]+\\)', s4) else False)  # True
print(re.fullmatch('\\([A-Z]+.*[0-9]+\\)', s4).group(0))            # (G311); (G310)

对于s4这样的字符串,我们希望只匹配第一个()的字符串,此时可以使用re.match()方法:

5) 匹配字符串开头以()结尾,()中固定元字符为大写字母、任意一个字符、数字

print(True if re.match('\\([A-Z]+.[0-9]+\\)', s4) else False)  # True
print(re.match('\\([A-Z]+.[0-9]+\\)', s4).group(0))            # (G311)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值