python正则表达式使用实例 python的正则表达式匹配( 二 )


re.compile(pattern[, flags])4. 匹配的方式
正则表达式匹配的方式主要有3种match, search和findall 。如果你懂英语的话,就知道它们的区别,这里前两个都是单一匹配,只会匹配一个流程,如果有多个符合匹配规则的,它们只会返回第一个结果,而findall会把所有符合候选的都匹配出来 。而前两个的区别就是match必须是开头就要能够匹配,也就是和startwith差不多的效果,而search则可以在任意位置进行匹配 。
下面看一下三个方法的参数表示,其中pattern为我们制定的正则表达式,string为我们要匹配的字符串,flags表示匹配模式:
re.match(pattern, string, flags=0)re.search(pattern, string, flags=0)findall(string[, pos[, endpos]])因此我们选择方式时有以下几个步骤:
是否需要匹配多个?是,选择findall
是否需要从头匹配?是,选择match
一般情况使用search
5. 匹配结果展示
匹配结果展示主要有以下四个部分组成:
group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0);start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0;end([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;span([group]) 方法返回 (start(group), end(group)) 。例如下面这个例子,主要表现了我们如何调用这四个部分 。>>>import re>>> pattern = re.compile(r'd+')# 用于匹配至少一个数字>>> m = pattern.match('one12twothree34four')# 查找头部,没有匹配>>> print mNone>>> m = pattern.match('one12twothree34four', 2, 10) # 从'e'的位置开始匹配,没有匹配>>> print mNone>>> m = pattern.match('one12twothree34four', 3, 10) # 从'1'的位置开始匹配,正好匹配>>> print m# 返回一个 Match 对象<_sre.SRE_Match object at 0x10a42aac0>>>> m.group(0)# 可省略 0'12'>>> m.start(0)# 可省略 03>>> m.end(0)# 可省略 05>>> m.span(0)# 可省略 0(3, 5)6. 举一个简单的例子
一个更好的,更直观易懂的方法是如下这个例子,相比较刚才使用数字索引,它将每一个匹配内容语义化,使得代码更加容易理解 。contactInfo = '( Nucleus (span 2 3) (rel2par span)'pattern=re.compile(r'(?P<nuclearity>w+) (span (?P<start>w+) (?P<end>w+)) (rel2par (?P<relation>w+))')match = pattern.search(contactInfo)print(match.group())# Nucleus (span 2 3) (rel2par span)print(match.group("nuclearity"))# Nucleus print(match.group("start"))# 2print(match.group("end"))# 3print(match.group("relation"))# span从上述的例子中我们就可以获得最直观的结果,我们只需要将这些结果存入到我们需要的数据结构中即可 。
7. 其他一些补充知识
7.1 匹配常用的一些格式
如果我们只需要匹配一些常用的格式,如姓名、身份证、邮箱、电话号码等,都是有现成的工具直接生成,不需要我们进行再次编写 。
7.2 匹配中文字符
如果你只是想匹配若干个中文汉字,使用下面的正则表达式:
[u4E00-u9FA5\s]+ 多个汉字,包括空格[u4E00-u9FA5]+ 多个汉字,不包括空格[u4E00-u9FA5] 一个汉字这里还有匹配更全的中文字的方法 。
提到用正则表达式匹配汉字,很容易搜到这个[u4e00-u9fa5],但是它不算全面,不包含一些生僻汉字 。
本文对此问题做一个梳理 。
以下是比较全面的汉字Unicode分布,参考Unicode 10.0标准(2017年6月发布):


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: