Python正则表达式基础

import re

'''
字符类:
[xyz]   枚举字符集,匹配括号中的任意字符。例如,"t[aeio]n"匹配"tan"、"ten"、"tin"、"ton"。
[^xyz]  否定枚举字符集,匹配不在此括号中的任意字符
[a-z]   指定范围的字符,匹配指定范围的任意匹配。例如:[0-9]
['m-z]  指定范围以外的字符,匹配指定范围以外的任意匹配

预定义字符类:
.   除行终止符外的任何字符
\d  数字。等价于[0-9]
\D  非数字。等价于[^0-9]
\s  空白字符。等价于[ \t\n\r\f\v]
\S  非空白字符。等价于[^ \t\n\r\f\v]
\w  单词字符。等价于[a-zA-ZO-9_]
\W  非单词字符。等价于[^a-zA-Z0-9_]

边界匹配符:
^  行开头    "^a" 匹配 "abc" 中的"a";"^\s*" 匹配 " abc " 中的左边空格
$  行结尾    "c$" 匹配 "abc" 中的"c";"b$" 不匹配 "abc"中的"b";"^123$" 匹配 "123" 中的 "123"
\b 单词边界   r'\bfoo\b' 匹配 'foo' 、'foo.'、'(foo)'、'bar foo baz',但不匹配'foobar'、'foo3'
\B 非单词边界  r'py\B' 匹配'python'、'py3'、'py2',但不匹配'happpy'、'sleepy.'、'py!'
\A 字符串开头  
\Z 字符串结尾(除最后行终止符)

重复限定符:
X?      X出现0次或1次,等价于X{0,1}。例如,"colou?r"可以匹配"color"或者"colour"
X*      X出现任意次,等价于X{0,}。例如,"zo*"可以匹配"z"、"zo"、"zoo"等
X+      X出现1次或多次,等价于X{1,}。例如,"zo+"可以匹配"zo"和"zoo",但不匹配"z"
X{n}    X出现n次。例如,b[0-9]{3},匹配 000~999。例如,"o{2}"不能与"Bob"中的"o"匹配,但是可以与"food"中的两个"o"匹配
X{n,}   至少出现n次。例如, "o{2,}"不匹配"Bob"中的"o",但是匹配"foooood"中所有的o."o{1,}"等价于"o+"。"o{0,}"等价于"o*"
X{n,m}  出现n~m次。例如,"o{1,3}"匹配"fooooood"中前三个o。"o{0,1} "等价于"o?"
如果在重复限定符后面加后缀“?”,则正则表达式引擎使用懒惰性匹配算法,在满足条件的情况下尽可能少重复

正则表达式中“|”表示选择。用于选择符匹配多个可能的正则表达式中的一个。例如:“red | green | blue”。

如果需要重复多个字符,则需要把正则表达式的一部分放在圆括号()内,形成分组。然后对整个组使用诸如重复操作符的正则操作。
例如,IP地址的一般形式为:ddd.ddd.ddd.ddd,其中ddd.重复了三次,可以使用分组:(\d{1,3}\.){3}\d{1,3}。

当用“()”定义了一个正则表达式组后,正则引擎则会把被匹配的组按照顺序编号,存入缓存。对被匹配的组可以进行向后引用:
\1引用第一个匹配的组,\2引用第二个组,依此类推。而\0则引用整个被匹配的正则表达式本身。

'''


def check_phone(str):
    regex_phone = re.compile(r'^(\(\d{3}\)|\d{3}-)?\d{8}$')
    # 如果有区号,则以3个数字开头,\或-分隔
    return True if regex_phone.match(str) else False


def check_zip(str):
    regex_zip = re.compile(r'^\d{6}$')
    return True if regex_zip.match(str) else False


def check_url(str):
    regex_url = re.compile(r'^https?://\w+(?:\.[^\.]+)+(?:/.+)*$')
    return True if regex_url.match(str) else False


s1 = input('请输入中国电话号码: ')
print(s1, '是有效的电话号码格式吗?', check_phone(s1))
s2 = input('请输入中国邮政编码: ')
print(s2, '是有效的邮政编码格式吗?', check_zip(s2))
s3 = input('请输入网站网址: ')
print(s3, '是有效的网站网址格式吗?', check_url(s3))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值