正则表达式笔记
语法:/
匹配 /
修饰
python re
Python | |
---|---|
1 |
|
修饰
-
i
gnore case:忽略大小写。 -
g
lobal search: Retain the index of the last match, allowing subsequent searches to start from the end of the previous match. Without the global flag, subsequent searches will return the same match. -
m
ultiline:正则表达式中的^
和$
将会分别匹配输入字符串中的每一行的开始和结束,而不是整个字符串的开始和结束。 -
u
nicode:可以使用扩展的unicode转义形式\x{FFFFF}
字符匹配
基本字符
-
.
点:在正则表达式中,点(.)匹配除换行符(\n
)之外的任意单个字符。 -
[]
字符集:字符集用于匹配方括号内的任意一个字符。例如,[abc]
可以匹配a
、b
或c
中的任意一个字符。 -
[a-z]
范围:表示匹配从a
到z
的任意一个小写字母。 -
[a-zA-Z]
:表示匹配从a
到z
的任意一个小写字母或从A
到Z
的任意一个大写字母。 -
[^a-z]
取反:当方括号内的第一个字符是^
时,表示取反,即匹配任何不在方括号内的字符。例如,[^a-z]
将匹配除小写字母之外的任意字符。 -
[^a-zA-Z]
:表示匹配除小写字母和大写字母之外的任意字符。
预定义字符类
-
\d
:匹配任何数字字符,等价于[0-9]
。 -
\D
:匹配任何非数字字符,等价于[^0-9]
。 -
\w
:匹配任何单词字符,包括字母、数字和下划线,等价于[a-zA-Z0-9_]
。 -
\W
:匹配任何非单词字符,等价于[^a-zA-Z0-9_]
。 -
\s
:匹配任何空白字符,包括空格、制表符、换行符等,等价于[ \f\n\r\t\v]
。 -
\S
:匹配任何非空白字符,等价于[^ \f\n\r\t\v]
。
这些预定义的字符类在正则表达式中非常方便,因为它们提供了一种快速的方式来匹配常见的字符类型,而不需要手动列出所有可能的字符。
位置和边界匹配
-
^
:匹配输入字符串的开始位置,如果在多行模式下(m
标志),则匹配每一行的开始位置。 -
$
:匹配输入字符串的结束位置,如果在多行模式下(m
标志),则匹配每一行的结束位置。 -
\b
:匹配一个单词边界,即单词字符和非单词字符之间的位置。例如,\bworld\b
可以匹配hello world
中的world
,但是不会匹配worlds
中的world
。 \B
:匹配非单词边界,即两个单词字符之间的位置,或两个非单词字符之间的位置。例如,\Bworld\B
不会匹配hello world
中的world
。但是会匹配eworlds
中的world
。
量词
基本
-
+
加号:匹配前面的字符出现1次或多次。 -
?
问号:匹配前面的字符出现0次或1次。 -
*
星号:匹配前面的字符出现0次或多次。 -
{3}
:匹配前面的字符恰好出现3次。 -
{3,5}
:匹配前面的字符出现3到5次。 -
{3,}
:匹配前面的字符出现3次或更多次。
贪婪匹配
在正则表达式中,量词默认贪婪匹配,会匹配尽可能多的字符。
例如,对于字符串abcabc
,使用正则表达式a.*c
进行匹配时,贪婪匹配会匹配整个字符串abcabc
,而懒惰匹配(非贪婪匹配)会匹配第一个abc
。
懒惰匹配
在量词后面加?
为懒惰匹配,会匹配尽可能少的字符。
例如,使用正则表达式\d*?abc\d*?
对同样的字符串123abc456
进行匹配时,懒惰匹配会尽可能少地匹配数字,因此它会匹配123
和456
之间的abc
。
分组和引用
() 捕获分组
捕获分组用于将匹配的一部分作为单独的一个组进行捕获,方便后续的引用和操作。
-
(at)
:这将匹配"at"这个词,并将其作为一个分组。 -
pattern|Pattern
:使用竖线|
表示匹配pattern或者Pattern。 -
(p|P)attern
:匹配"pattern"或"Pattern"。
$1 替换
捕获分组在替换操作中可以通过\(1、\)2等来引用。
日期替换:yyyy-MM-dd
\(\to\) MM-dd-yyyy
Text Only | |
---|---|
1 |
|
Text Only | |
---|---|
1 |
|
所有日期格式:
Text Only | |
---|---|
1 |
|
(?:) 非捕获分组
非捕获分组用于组合表达式的一部分,但不捕获匹配的文本,不存储分组值,也不影响\(1、\)2等分组引用。
(?:pattern)
:匹配pattern
但不捕获匹配的文本。
\1 引用
\1
、\2
等用于向后引用前面的捕获分组。
- 匹配相邻的两个相同的单词:
(\w+) \1
断言
断言用于指定匹配的条件,只有当条件满足时才会匹配成功。
(?=) (?!) 先行断言 Lookahead
-
\b\w+\b(?=ing\b)
:匹配以"ing"结尾的单词。 -
\b\w+\b(?!ing\b)
:匹配不以"ing"结尾的单词。
(?<=) (?<!) 后行断言 Lookbehind
-
(?<=\$)\d+
:匹配一串数字,仅当它前面有一个$
符号时。 -
(?<!\d)\d
:匹配一个数字,仅当它前面没有数字时。