re正则表达式


re这个模块提供了与 Perl 语言类似的正则表达式匹配操作。其模式和被搜索的字符串既可以是 Unicode 字符串 (str) ,也可以是8位字节串 (bytes)。 但是,Unicode 字符串与8位字节串不能混用:也就是说,你不能用一个字节串模式去匹配 Unicode 字符串,反之亦然;类似地,当进行替换操作时,替换字符串的类型也必须与所用的模式和搜索字符串的类型一致。


re基础语法


正则表达式可以包含普通或者特殊字符。绝大部分普通字符,比如 ‘A’, ‘a’, 或者 ‘0’,都是最简单的正则表达式。它们就匹配自身。你可以拼接普通字符,所以 last 匹配字符串 ‘last’. (在这一节的其他部分,我们将用 this special style 这种方式表示正则表达式,通常不带引号,要匹配的字符串用 ‘in single quotes’ ,单引号形式。)

有些字符,比如 ‘|’ 或者 ‘(’,属于特殊字符。 特殊字符既可以表示它的普通含义, 也可以影响它旁边的正则表达式的解释。

重复修饰符 (, +, ?, {m,n}, 等) 不能直接嵌套。这样避免了非贪婪后缀 ? 修饰符,和其他实现中的修饰符产生的多义性。要应用一个内层重复嵌套,可以使用括号。 比如,表达式 (?:a{6}) 匹配6个 ‘a’ 字符重复任意次数。


运算优先级

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。相同优先级的从左到右进行运算,不同优先级的运算先高后低。

下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

运算符描述
\转义符
(), []圆括号和方括号
*, +, ?, {n}, {n,}, {n,m}限定符
^, $, \任何元字符、任何字符定位点和序列(即:位置和顺序)
|替换,“或"操作字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food”。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。



常用正则表达式


单个字符

1. . 就 是匹配除 \n (换行符)以外的任意一个字符

str = 'aabbabaabbaa'
print(re.findall(r'a.b',str))
['aab', 'aab']



2. *前面的字符匹配0次或以上

str = 'aabbabaabbaa'
print(re.findall(r'a*b',str))
['aab', 'b', 'ab', 'aab', 'b']



3. +前面的字符匹配1次或以上

str = 'aabbabaabbaa'
print(re.findall(r'a+b',str))
['aab',  'aab']



4. ?前面的字符匹配0次或1次

str = 'aabbabaabbaa'
print(re.findall(r'a?b',str))
['aab',  'ab', 'ab', 'aab', 'ab']



5. {m}对其之前的正则式指定匹配 m 个重复
少于 m 的话就会导致匹配失败。比如, a{6} 将匹配6个 ‘a’ , 但是不能是5个。


6. {m,n}对正则式进行 m 到 n 次匹配,在 m 和 n 之间取尽量多。
比如,a{3,5} 将匹配 3 到 5个 ‘a’。忽略 m 意为指定下界为0,忽略 n 指定上界为无限次。 比如 a{4,}b 将匹配 ‘aaaab’ 或者1000个 ‘a’ 尾随一个 ‘b’,但不能匹配 ‘aaab’。逗号不能省略,否则无法辨别修饰符应该忽略哪个边界。



组合字符

’*‘ 和 '+‘修饰符都是 贪婪的,它们在字符串进行尽可能多的匹配;在修饰符之后添加 ‘?’ 将使样式以 非贪婪方式进行匹配,尽量少的字符将会被匹配。


1. .*贪婪,匹配从.*前面为开始到后面为结束的所有内容

str = 'aabbabaabbaa'
print(re.findall(r'a.*b',str))
['aabbabaabb']



2. .*? 非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取

print(re.findall(r'a.*?b',str))
['aab', 'ab', 'aab']



3. (.*?) 非贪婪,与上面一样,只是与上面的相比多了一个括号只保留括号的内容

print(re.findall(r'a(.*?)b',str))
['a', '', 'a']



findall函数的应用

它在re.py中有定义:

def findall(pattern, string, flags=0):
    """Return a list of all non-overlapping matches in the string.
    If one or more capturing groups are present in the pattern, return
    a list of groups; this will be a list of tuples if the pattern
    has more than one group.
    Empty matches are included in the result."""
    return _compile(pattern, flags).findall(string)

即返回string中所有与pattern匹配全部字符串,返回形式为数组

import re
 
str = '一段字符串'
print(re.findall(r'正则表达式',str))

re.findall( r’正则表达式’, str, re.S),参数有re.S,则不会对’\n’进行中断



参考资料:
re — 正则表达式操作
正则表达式基本用法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值