Python中的正则表达式模块为re。
单个匹配
Python中,正则表达式单个匹配有两种,一种是search()(对目标字符串整个进行匹配),另一种是match()(只对目标字符串开头进行匹配),匹配成功返回一个Match对象,匹配失败返回None:
import re
# 全文匹配
re.search(r'^\d{3}\-\d{3,8}$', '010-12345')
# 开头匹配
re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
# <_sre.SRE_Match object; span=(0, 9), match='010-12345'>
对于search()或match()搜索返回的match对象m,可以使用m.group()获取匹配字符串。
group()函数还可以用在捕获特定分组上,下标0代表匹配到的完整字符串,后续下标代表捕获的特定分组:
>>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")
>>> m.group(0) # The entire match
'Isaac Newton'
>>> m.group(1) # The first parenthesized subgroup.
'Isaac'
>>> m.group(2) # The second parenthesized subgroup.
'Newton'
>>> m.group(1, 2) # Multiple arguments give us a tuple.
('Isaac', 'Newton')
如果多个()嵌套的话,外层括号表达式的下标顺序在内层括号表达式之前
多个匹配
当要搜索一个字符串中所有匹配的子串时,就要使用findall()函数了,函数结果返回一个list,里面包含所有匹配的字符串,如果没有匹配字符串则为空list:
>>> re.findall(r'\d+', '12a34b56c')
['12', '34', '56']
字符串分割
re模块还提供了比普通split()更强大的分割字符串功能,函数签名如下:
re.split(pattern, string, maxsplit=0, flags=0)
使用示例如下:
>>> 'a b c'.split(' ')
['a', 'b', '', '', 'c']
>>> re.split(r'\s+', 'a b c')
['a', 'b', 'c']
# 把不规范的输入规范化
>>> re.split(r'[\s\,\;]+', 'a,b;; c d')
['a', 'b', 'c', 'd']
普通的字符串分割返回分隔符以外的字符list:
>>> re.split(r'\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
当正则表达式内包含捕捉括号时(),则会一起返回分隔符:
>>> re.split(r'(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
当目标字符串以分割符开头或结尾时时,会分别分割出一个空字符串'':
>>> re.split(r'\w+', 'a.c')
['', '.', '']
# 以分隔符开头,开头切出一个''。以分隔符结尾,结尾再切出一个''。
可以设置一个最大分割次数:
>>> re.split(r'\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
可以设置一个忽略大小写标志re.IGNORECASE:
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
编译
当需要多次使用某个正则表达式时,可以预先编译,然后调用match()、search()、findall()等方法:
>>> import re
# 编译:
>>> re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
# 使用:
>>> re_telephone.match('010-12345').groups()
('010', '12345')
>>> re_telephone.search('010-8086').groups()
('010', '8086')
总结一下,不编译的使用方法:
re.search(r'\w+', srcStr)
编译后再使用:
rc = re.compile(r'\w+')
rc.search(r'\W+', srcStr)
替换
Python中字符串替换的函数是re.sub(pattern, replacement, string, count=0, flags=0),其中replacement可以是字符串,也可以是函数。count代表要替换的个数,0为全部替换,使用示例:
>>> import re
>>> re.sub(r'\d+', '数', '1f2rgt3')
'数f数rgt数'
本文介绍了Python中正则表达式的使用方法,包括单个匹配、多个匹配、字符串分割、编译及替换等功能,并通过实例演示如何应用这些技巧。
1668

被折叠的 条评论
为什么被折叠?



