本文共 2460 字,大约阅读时间需要 8 分钟。
正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。python中使用re.match()
函数来判断给定字符串和正则表达式是否匹配,匹配是从左到右进行匹配,直到正则表达式匹配完或匹配失败,若匹配成功,则返回Match
对象,否则返回None
。
\n
匹配换行符,\f
匹配换页符,\t
匹配制表符,\r
匹配回车符,\t
匹配任何空白字符(空格,制表符,换页符等),\w
匹配任何一个数字或字母,\d
匹配一个数字,.
匹配任意字符。import res = input('输入一个字符串:')if re.match('\d*(abc)*(yesterday|today|tomorrow)', s): print('yes')else: print('no')
运行结果如下:
输入 12yesterdayIn [24]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)
输入一个字符串:12yesterday
yes
输入 1abctoday
In [25]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)
输入一个字符串:1abctoday
yes
输入 12345645abcabcabctomorrow
In [26]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)
输入一个字符串:12345645abcabcabctomorrow
yes
如果我们要提取字符串中的某些子串也可以使用():
import res = input('输入一个字符串:')m = re.match('<([a-zA-Z]+)>\{(\d+)\}', s)if m: print('匹配的串为 %s' % m.group(0)) print('name: %s' % m.group(1)) print('age: %s' % m.group(2))else: print('匹配失败!')
运行结果如下:
In [28]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)
输入一个字符串:{10}
匹配的串为 {10} name: Dolly age: 10 In [30]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)
输入一个字符串:{23}
匹配的串为 {23} name: Mike age: 23
group(0)
是匹配的字符串。
>>> re.match(r'^(\d+)(0*)$', '102300').groups()('102300', '')
由于默认采用贪婪匹配,故(\d+)
尽可能匹配多的字符串,导致(0*)
匹配空字符串。要使+采用非贪婪匹配在其后加上?
就行了:
>>> re.match(r'^(\d+?)(0*)$', '102300').groups()('1023', '00')
转载地址:http://wqhzb.baihongyu.com/