Python中使用正则表达式:
# 导入re模块
import re
# 使用match方法进行匹配操作
result = re.match(正则表达式, 要匹配的字符串)
# 如果上一步匹配到数据的话,可以使用group方法来提取数据(满足规范要求的数据)
result.group()
匹配单字符
- 匹配单个数字:\d :匹配一位数字;等价于[0123456789];等价于[0-9]
- 匹配单个字符:[a-z]:匹配所有的小写字母;[ab]:匹配a、b
\w:匹配一个字符(数字、字母、字符、中文、别的语言等。。。)
\s:匹配空白(空格、Tab键)
注意:所有\大写字母 与 \小写字母 含义相反
. :匹配任意一个字符
匹配多个字符
- \d{1,2}:匹配一到两个数字,eg: 32,5
\d{1,3}:匹配一到三个数字,eg:123,533,95,1 - \d{11}:匹配必须11个数字:eg:12325567890
- ?:问号前面的一个字符可有可无
- *:星号前面的可以有0个或多个,“.*”:匹配0个或多个字符; “.+”:匹配一个或多个字符
eg:(正常情况下'.'匹配不到\n,当传入的参数:re.S,意思是让'.'包括\n)
判断开头,判断结尾
- ^:匹配字符串开头
- $:匹配字符串结尾
示例
1.查看一个字符串是否符合python变量规范:
import re
# 判断变量名是否符合要求
def main():
names = ['name1', '_name', '$name', '1name', 'name_', '_name1', 'n_d_', 'name!', '_@', '_']
for name in names:
# if re.match(r"[a-zA-Z_][a-zA-Z0-9_]*", name):
# if re.match(r"[a-zA-Z_][a-zA-Z0-9_]*$", name): # 当正则表达式判断完时,正好是字符串结尾;言外之意:在python中match默认匹配开头
if re.match(r"^[a-zA-Z_][a-zA-Z0-9_]*$", name): # 完整的写法
print("%s is correct!"%name)
else:
print("%s is not right!"%name)
if __name__ == "__main__":
main()
2.匹配出163的邮箱地址,且@符合之前有4到20位,例如hello@163.com
# 匹配出163的邮箱地址,且@符合之前有4到20位,例如hello@163.com
import re
def main(mail_addr):
# ret = re.match(r".{4,20}@163[.]com$", mail_addr) # 这种写法不对:hello@@163.com 也被判断为对的。
# 如果在正则表达式中需要用到某些普通的字符,如:. 如: ? 等,仅仅需要在它们前面添加\
# ret = re.match(r".{4,20}\@163\.com$", mail_addr) # 为什么错,因为“.” 匹配所有字符,所以两个@@也对了。
# 教程中的写法
ret = re.match(r"[a-zA-Z0-9]{4,20}@163\.com$", mail_addr)
if ret:
print("%s符合要求的邮箱地址。"%mail_addr)
else:
print("%s不符合要求的邮箱地址。"%mail_addr)
if __name__ == "__main__":
mail_addr = input("请输入一个要判断的邮箱地址:")
main(mail_addr)