如何使用正则匹配整个字符串?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
如果字符串比较特殊,例如像s3
和s4
这样首尾包含括号的字符串,可以使用如下方式:
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)