python的re模块

一、官方文档

正则表达式HOWTO — Python 3.10.2 文档https://docs.python.org/zh-cn/3/howto/regex.html#regex-howto

re --- 正则表达式操作 — Python 3.10.2 文档https://docs.python.org/zh-cn/3/library/re.html#re-syntax

正则表达式(称为RE,或正则,或正则表达式模式)本质上是嵌入在Python中的一种微小的、高度专业化的编程语言,可通过 re 模块获得。 使用这种小语言,你可以为要匹配的可能字符串集指定规则;此集可能包含英语句子,电子邮件地址或你喜欢的任何内容。 然后,您可以询问诸如“此字符串是否与模式匹配?”或“此字符串中的模式是否匹配?”等问题。 你还可以使用正则修改字符串或以各种方式将其拆分。

RE在python中的实现模块为re,属于官方内置模块。RE在多种语言都有实现,实现方式大同小异,因此,它值得你拥有!

二、根据官方文档进行操作

1、了解匹配字符

元字符含义
.
任意匹配:匹配除换行符之外的任何内容(注意:一个“.”代表一个字符
^

行的头部匹配:在行的开头匹配。 除非设置了 MULTILINE 标志,否则只会在字符串的开头匹配。 在 MULTILINE 模式下,这也在字符串中的每个换行符后立即匹配。例如,如果你希望仅在行的开头匹配单词 From,则要使用的正则 ^From (注意:^需要放到表达式或组内的头部)

$
行的末尾匹配:匹配行的末尾,定义为字符串的结尾,或者后跟换行符的任何位置。(注意:只匹配每一行的末尾连续字段,中间字段不匹配,形式以$结尾
*
重复匹配:指定前一个字符可以匹配零次或多次,而不是恰好一次,例如,ca*t 将匹配 'ct' (0个 'a' 字符),'cat' (1个 'a' ), 'caaat' (3个 'a' 字符),等等。类似 * 这样的重复是 贪婪的;当重复正则时,匹配引擎将尝试尽可能多地重复它(一直往前寻找*的前一个字符,直至找到或找不到)。特别的,字符串 'abcbd'的正则表达式为a[bcd]*b,会先找到a,然后尽可能匹配一组bcd, 接着会进一步匹配bc,最后匹配b(每一步的最后都会匹配b)。(注意:只是前一个字符重复多次,不是多字符,多字符要加上组匹配
+
任意次重复:对它前面的正则式匹配1到任意次重复。例如 ab+ 会匹配 'a' 后面跟随1个以上到任意个 'b',它不会匹配 'a'。(注意:与*的区别是从1开始,而不是从0;
?
0到1重复:对它前面的正则式匹配0到1次重复。 ab? 会匹配 'a' 或者 'ab'。(注意:(.+?)代表任意字符(.)不断重复(+)并且对他的组合一直重复(?)
{}
m个重复:表示为{m},对其之前的正则式指定匹配 m 个重复;少于 m 的话就会导致匹配失败。比如, a{6} 将匹配6个 'a' , 但是不能是5个。
[]
集合匹配:用于指定字符类,它是你希望匹配的一组字符。例如, [abc] 将匹配任何字符 a、 b 或 c ;因为它是一个范围的字符,可以简写成 [a-b];元字符在 [ ] 中变成普通字符,如$字符。特殊的,元字符^放在[ ] 第一位,依旧具有其特殊含义。(注意:^在[]里依旧特殊
\

也许最重要的元字符是反斜杠,\。反斜杠后面可以跟各种字符,以指示各种特殊序列。它也用于转义所有元字符,让其变成普通字符。一些以 '\' 开头的特殊序列表示通常有用的预定义字符集,例如数字集、字母集或任何非空格的集合。

\w 匹配任何字母数字字符,如果正则表达式模式以字节类表示,这相当于类 [a-zA-Z0-9_],如果传入参数re.ASCII 标志,可以在字符串模式中使用更为受限制的 \w 定义

\W 匹配任何非字母与数字字符;这相当于类 [^a-zA-Z0-9_]

\d 匹配任何十进制数字;这等价于类 [0-9]

\D 匹配任何非数字字符;这等价于类 [^0-9]

\s 匹配任何空白字符;这等价于类 [ \t\n\r\f\v]

\S 匹配任何非空白字符;这相当于类 [^ \t\n\r\f\v]

\A 仅匹配字符串的开头。 当不在 MULTILINE 模式时,\A 和 ^ 实际上是相同的。 在 MULTILINE 模式中,它们是不同的: \A 仍然只在字符串的开头匹配,但 ^ 可以匹配在换行符之后的字符串内的任何位置。

\Z 只匹配字符串尾。

\b 字边界。 这是一个零宽度断言,仅在单词的开头或结尾处匹配。 单词被定义为一个字母数字字符序列,因此单词的结尾由空格或非字母数字字符表示。

\B 另一个零宽度断言,这与 \b 相反,仅在当前位置不在字边界时才匹配。

|

或匹配:或运算符。 如果 A 和 B 是正则表达式,A|B 将匹配任何与 A 或 B 匹配的字符串。 | 具有非常低的优先级,以便在交替使用多字符字符串时使其合理地工作。 Crow|Servo 将匹配 'Crow' 或 'Servo',而不是 'Cro''w' 或 'S' 和 'ervo'

要匹配字面 '|',请使用 \|,或将其括在字符类中,如 [|]

()
分组匹配:组由 '('')' 元字符标记。 '(' 和 ')' 与数学表达式的含义大致相同;它们将包含在其中的表达式组合在一起,你可以使用重复限定符重复组的内容,例如 *+? 或 {m,n}。 例如,(ab)* 将匹配 ab 的零次或多次重复。'(ab)*'的匹配结果,如'ababababab'的位置是(0, 10) 。(注意:如果使用了分组分配,那么分组也会作为子集返回

2、应用匹配

方法 / 属性

目的

match()

确定正则是否从字符串的开头匹配。

search()

扫描字符串,查找此正则匹配的任何位置。

findall()

找到正则匹配的所有子字符串,并将它们作为列表返回。

finditer()

找到正则匹配的所有子字符串,并将它们返回为一个 iterator

group()

返回正则匹配的字符串

start()

返回匹配的开始位置

end()

返回匹配的结束位置

span()

返回包含匹配 (start, end) 位置的元组

3、编译标志

编译标志允许你修改正则表达式的工作方式。 标志在 re 模块中有两个名称,长名称如 IGNORECASE 和一个简短的单字母形式,例如 I。 (如果你熟悉 Perl 的模式修饰符,则单字母形式使用和其相同的字母;例如, re.VERBOSE 的缩写形式为 re.X。)多个标志可以 通过按位或运算来指定它们;例如,re.I | re.M 设置 I 和 M 标志。

标志

含意

ASCIIA

使几个转义如 \w\b\s 和 \d 匹配仅与具有相应特征属性的 ASCII 字符匹配。

DOTALLS

使 . 匹配任何字符,包括换行符。

IGNORECASEI

进行大小写不敏感匹配。

LOCALEL

进行区域设置感知匹配。

MULTILINEM

多行匹配,影响 ^ 和 $

VERBOSEX (为 '扩展')

启用详细的正则,可以更清晰,更容易理解。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lion King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值