正则表达式

时间:2022-06-19
本文章向大家介绍正则表达式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

语法

说明

字符

.

匹配任意字符,除换行符"n”外

转义字符,使后面一个字符失去特殊意思

[...]

字符集。^表示取反。

预定义字符集(可以写在字符集[...]中)

d

数字:[0-9]

D

非数字:[^d]

s

空白字符:[<空格>trnfv]

S

非空白字符:[^s]

w

单词字符:[A-Za-z0-9_]

W

非单词字符:[^w]

数量词(用在字符或(…)之后) 匹配前一个字符...次

*

0次或无限次

+

1次或无限次

?

0次或1次

{m}

m次

{m, n}

m至n次 m n可以省略:若省略m,则匹配0至n次;若省略n,则匹配m至无限次

*?+???{m, n}?

使*+?{m, n}变成非贪婪模式

边界匹配(不消耗待匹配字符串中的字符)

^

字符串开头或多行模式中每一行的开头

$

字符串末尾或多行模式中每一行的末尾

A

仅匹配字符串开头

Z

仅匹配字符串末尾

b

匹配w和W之间

B

[^b]

逻辑、分组

|

任意匹配左右表达式。先左,若成功匹配则跳过匹配右边。若|不在()中,范围是整个正则表达式

(...)

括号内的表达式作为分组,每一个括号的编号+1。可以后接数量词

(?P<name>...)

除了原有的编号外,再指定一个额外的别名

<number>

引用编号为<number>的分组匹配到的字符串

(?P=name)

引用别名为<name>的分组匹配到的字符串

import re

# 将正则表达式编译成pattern对象
pattern = re.compile(r'hello')

# 使用pattern匹配文本,获得匹配结果,无法匹配时则返回None
match = pattern.match('hello world!')

if match:
   # 使用match获得分组信息
   print(match.group())

hello

同义简写:

import re

m = re.match(r'hello','hello world!')
print(m.group())

re.compile(strPattern[,flag]):

flag的可选值有:

  • re.I 忽略大小写
  • M 多行模式
  • S 点任意匹配模式,改变'.'的行为
  • L 使预定字符类w W b B s S 取决于当前区域设定
  • U 使预定字符类w W b B s S d D 取决于unicode定义的字符属性
  • X 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。以下两个正则表达式是等价的:
a = re.compile(r"""d +  # the integral part
                   .    # the decimal point
                   d *  # some fractional digits""", re.X)
b = re.compile(r"d+.d*")