为了避免正则表达式中出现太多的反斜杠,建议使用r
字符串,r"\n"表示两个字符\和n,前面不加r则表示一个换行符\n。(正则的\
要写成\\
,而在Python中,也是一样,这就导致在Python写正则时需要写\\\\
四个反斜杠)
.
: 在默认模式下匹配除换行的任意字符,如果指定re.DOTALL
模式,则匹配包括换行的任意字符
+
: 前面的正则式匹配1到任意次,默认贪婪匹配
?
: 前面的正则式匹配0到1次, 默认也是贪婪匹配,能匹配到1次绝不匹配0次
\
: 转移字符,允许你匹配正则中的特殊字符*
,.
等
[]
: 表示一个字符集合。字符可以单独表示如[ab]
,也可以是范围如[a-z]
,[0-9]
,[A-Z]
,或者是\
表示的字符类如[\w]
。特殊字符在[]中无特殊含义,如[(+*)]
仅表示匹配这四个字符中的其中一个。另外^
表示字符集取反,如[^a]
表示匹配除a的任意字符,不过如果^
不是放到第一就只是字符^
。因为[]内必须包含字符,所以[][]
是一个整体的表达式,表示匹配[
或]
(?aiLmsux)
: ‘a’, ‘i’, ‘L’, ‘m’, ‘s’, ‘u’, 'x’分别表示一种模式,比如a(re.A)只匹配ASCII字符,i(re.I)忽略大小写,L(re.L)不建议使用, m(re.M)也就是之前的re.MULTILINE
多行模式, s(re.S),也就是re.DOTALL
,u(re.U)Unicode匹配,x(re.X)注释模式,允许用#注释
(?:)
: 非捕获组合,也就是无法使用\1
引用了
(?aiLmsux-imsx:…)
: 这我没看懂
(?P
: 命名组合,未命名的组合是通过从1递增的数字来引用,命名后可以通过名字引用如(?P=name)
,当然数字引用依旧可用。如果是传递给re.sub
函数中的repl参数则应该写成\g
(?P=name)
: 引用一个命名组合,见上一个
(?#…)
: 注释,里面的内容会被忽略
(?: 上面的那个取反的结果
(?(id/name)yes-pattern|no-pattern)
: 如果给定的id或name捕获组存在且匹配到内容,则匹配yes-pattern指定的正则,不然就匹配no-pattern指定的正则
\d
: 一般指匹配[0-9]
\D
: \d取反集[^\d]
\s
: 匹配所有空白字符,对于ASCII指的是[ \t\n\r\f\v]
6个字符
\S
: \s取反
\w
: 匹配构成语句(世界各种语言的都算)的字符,对于ASCII指[a-zA-Z0-9_]
\W
: \w取反
\Z
: 只匹配字符串尾,和\A类似
python中的转义字符在正则中基本都能解析正常,只有\b在正则中有特殊含义
\a \b \f \n
\N \r \t \u
\U \v \x \\
将正则表达式pattern编译成正则表达式对象。说实话,没用过这个函数,都是直接调re的方法
扫描整个 字符串 找到匹配样式的第一个位置,并返回一个相应的match对象.如果没有匹配,就返回一个 None
匹配字符串的开头,即使在re.MULTILINE
模式下也只是匹配开头,不会匹配多行
如果string整个能匹配pattern正则,则返回match对象
用正则pattern切割字符串string,如果pattern包含捕获组(),则捕获组的内容也会在切割结果里
对 string 返回一个不重复的 pattern 的匹配列表, string 从左到右进行扫描,匹配按找到的顺序返回.
如果存在捕获组,则返回捕获组的结果,如果存在多个,则返回多个结果组成的元组
pattern 在 string 里所有的非重复匹配,返回为一个迭代器 iterator 保存了match对象
用repl替换从string中用pattern匹配出的内容,repl可以是字符串也可以是函数。
如果是函数,那参数为pattern匹配到的结果(match对象),返回值为替换后的内容。
如果是字符串,可以使用捕获组的命名和id,写法:\g
和\g
,虽然也支持\number
的形式,但为了避免歧义(比如\20
不知道是\2加字符0还是\20),所以建议使用\g<1>
而不是\1
同re.sub,但返回一个元组 (字符串, 替换次数)
转移pattern中的特殊字符,比如’.‘转为’.’
清除正则表达式的缓存
对 template 进行反斜杠转义替换并且返回。比如替换\1, \g<1>, \g
为相应的内容
给捕获组的命名或id,返回一个或多个捕获组的内容,返回结果是一个字符串或多个字符串组成的元组。不给参数默认为0
允许使用[0] [1]
的格式获取结果
返回一个包含所有子捕获组的元组
返回一个包含所有命名的捕获组的字典
返回 group 匹配到的字串的开始和结束标号。m.group(1)就相当于m.string[m.start(1):m.end(1)]
返回一个二元组 (m.start(group), m.end(group))。如果没有,返回(-1,-1)
正则引擎开始和停止在字符串搜索一个匹配的索引位置
捕获组的最后一个匹配的整数索引值和最后一个匹配的命名组名字
返回产生这个实例的 正则对象
传递到 match() 或 search() 的字符串
“abcbdog” 匹配出最接近dog的b,即bdog