python之正则表达式

正则表达式:使用一种形式化语法描述文本匹配模式,模式被解释一组指令,然后执行这组指令,以一个字符串作为输入,生成一个匹配子集原字符串修改版本。表达式可以包括籽棉量文本匹配,重复,模式组合,分支以及其他复杂规则。

一、查找文本中的模式

re常见的用法就是搜索文本中的模式,search()函数模式要扫描文本作为输入。如果找到这个模式则返回一个Match对象,如果未找到模式,search()返回None

import re
pattern = "this"
text = "Does this text match the pattern?"
match = re.search(pattern,text)
s = match.start()
e = match.end()
print s,e,text[s:e]


start()和end()给出字符串中相应的索引位置。

二、编译表达式

re包含一些模块级函数,用于处理作为文本字符串的正则表达式,不过对于程序频繁使用的表达式,编译这些表达式会更有效,compile()函数会把一个表达式字符串转换为一个RegexObject。

import re

regexes = [re.compile( p )
           for p in ["this", "that"]
          ]
for regex in regexes:
    regex.pattern
    if regex.search( text ):
        print "ok!"
    else:
        print "bad!"

三、多重匹配

到目前位置,search()是来查找字面量文本字符串的单个事例,findall()函数会返回输入中与模式匹配而不重叠的所有子串。finditer()会返回一个迭代器,它将生成Match实例。

import re

text = "aabahdbagdbabgda"
pattern = "ab"
for match in re.findall( text ):
    print match
for match in re.finditer( pattern, text ):
    s = match.start()
    e = match.end()
    print s, e, text[s:e]

四、模式语法

正则表达式可以支持更强大的模式,模式可以重复,可以锚定到输入中不同的逻辑位置。

import re
def test_pattern(text,patterns=[]):
    for pattern desc in patterns:
        for match in re.finditer(pattern,text):
            s = match.start()
            e = match.end()
            print s, e, text[s:e]
if __name__ =='__main__':
    test_pattern('ababdhabsba',
                 [('ab','"a" followed by "b"'),
                  ('ab*','a followed by one or more b'),
                  ('ab+','"a" followed by zero or one b')
                  ])

五、转义码

\d      一个数字
\D      一个非数字
\s      空白字符
\S      非空白字符
\w      字母数字
\W      非字母数字

六、锚定

可以使用锚定(anchoring)指令制定输入文本中模式应该出现的相对位置,下列是合法的锚定码:

^  字符串或者行的开始
$  字符串或者行的结束
\A 字符串开始
\Z 字符串结束
\b 一个单词开头或末尾的空串
\B 不在一个单词开头或末尾的空串

七,限定搜索

如果前提已经知道只需搜索整个输入的一个子集,可以告诉re限制搜索范围,从而进一步约束正则表达式匹配,例如,如果模式必须出现在输入的最前面,那么使用match()而不是search()会锚定搜索,而不必在搜索模式中显示的包含一个锚。这两个函数唯一的区别是:match从字符串的开头开始匹配,如果开头位置没有匹配成功,就算失败了;而search会跳过开头,继续向后寻找是否有匹配的字符串。针对不同的需要,可以灵活使用这两个函数。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值