Python学习笔记(9)正则表达式
元字符
. 代指所有除了换行符的所有字符 通配符
>>> re.findall(r'.', '1aA@#')
['1', 'a', 'A', '@', '#']
^ 对开始进行匹配
>>> re.findall(r'^\d*', '123456')
['123456']
>>> re.findall(r'^\d*', 'ABC123456')
['']
$ 对末尾进行匹配
>>> re.findall(r'\d+$', '123ABC456')
['456']
>>> re.findall(r'\d+$', '123ABC456ABC')
[]
* 重复匹配 [0, +oo]
>>> re.findall(r'.*', '123abcABC')
['123abcABC', '']
+ 重复匹配 [1, +oo]
>>> re.findall(r'.+', '123abcABC')
['123abcABC']
?[0,1]
>>> re.findall(r'a?', 'abcdabc')
['a', '', '', '', 'a', '', '', '']
{} 自定义匹配次数
>>> re.findall(r'a{3}', 'aaabaaba')
['aaa']
[] 字符集 取消元字符的特殊功能(\^-)除外 [1-9] 1到9
>>> re.findall(r'[1-9]abc', '1abcds5abc')
['1abc', '5abc']
>>> re.findall(r'[^1]', '123')
['2', '3']
>>> re.findall(r'[++]{2}', '++112233++')
['++', '++']
^ 放在中括号里取反
>>> re.findall(r'[^1]', '123123')
['2', '3', '2', '3']
\d 数字[0-9] \D任何非数字[^0-9]
>>> re.findall(r'\d', '123abc456')
['1', '2', '3', '4', '5', '6']
>>> re.findall(r'\D', '123abc456')
['a', 'b', 'c']
\s字符 任何空白字符[\t\n\r\f\v] \S任何非空白字符[^\t\n\r\f\v]
>>> re.findall(r'\s', ' ')
[' ', ' ', ' ', ' ']
>>> re.findall(r'\S', ' 123 123')
['1', '2', '3', '1', '2', '3']
\w 任何字母数字字符[a-zA-Z0-9] \W任何非字母数字字符[^a-zA-Z0-9]
>>> re.findall(r'\w', '123abcABC@#$')
['1', '2', '3', 'a', 'b', 'c', 'A', 'B', 'C']
>>> re.findall(r'\W', '123abcABC@#$')
['@', '#', '$']
\b一个单词辩解,也就是指单词和空格间的位置 特殊字符
>>> re.findall(r'\b', 'w n')
['', '', '', '']
findall():所有结果都返回到一个列表
search():返回一个对象,对象可以调用group()返回结果
>>> re.search(r'\d{3}', 'abc123abc456').group()
'123'
match() 只在字符串开始匹配
>>> re.match(r'\d{3}', 'abc123abc456')
>>> re.match(r'\w{3}', 'abc123abc456')
<_sre.SRE_Match object; span=(0, 3), match='abc'>
>>> re.match(r'\w{3}', 'abc123abc456').group()
'abc'
re.split()分割
>>> re.split(r'\s+', 'a b c')
['a', 'b', 'c']
>>> re.split(r'\s+,', 'a ,b ,c ,d')
['a', 'b', 'c', 'd']
re.sub('规则', '替换字符', '字符串', 替换次数)查找替换
>>> re.sub(r'\d', '*', '125ddesf365sa5df5')
'***ddesf***sa*df*'
>>> re.sub(r'\d', '*', '125ddesf365sa5df5', 3)
'***ddesf365sa5df5'
re.subn 返回替换了多少次
>>> re.subn(r'\d', '*', '125ddesf365sa5df5')
('***ddesf***sa*df*', 8)
re.compile规则编译成对
>>> p = re.compile('\d')
>>> s = p.findall('123abc')
>>> s
['1', '2', '3']
finditer 返回一个迭代器
>>> s = re.finditer(r'\d', '123abc')
>>> s
<callable_iterator object at 0x02C0EFB0>
>>> next(s)
<_sre.SRE_Match object; span=(0, 1), match='1'>
<_sre.SRE_Match object; span=(1, 2), match='2'>
>>> next(s)
<_sre.SRE_Match object; span=(2, 3), match='3'>
>>> next(s)
Traceback (most recent call last):
File "<pyshell#74>", line 1, in <module>
next(s)
StopIteration
组
>>> m = re.match(r'^(\w{3}).(\w{2,12})@qq.com$','www.946085650@qq.com')
>>> m
<_sre.SRE_Match object; span=(0, 20), match='www.946085650@qq.com'>
>>> m.groups()
('www', '946085650')
>>> m.group(1)
'www'
>>> m.group(2)
'946085650'
贪婪匹配
>>> re.match(r'^(\d+?)(0*)$', '1234560000').groups()
('123456', '0000')
>>> re.match(r'^(\d+)(0*)$', '1234560000').groups()
('1234560000', '')
浙公网安备 33010602011771号