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))
Python正则表达式基础
最新推荐文章于 2024-09-04 23:10:46 发布