正则表达式笔记
语法:/ 匹配 /修饰
python re
| Python | |
|---|---|
1 | |
修饰
-
ignore case:忽略大小写。 -
global 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. -
multiline:正则表达式中的^和$将会分别匹配输入字符串中的每一行的开始和结束,而不是整个字符串的开始和结束。 -
unicode:可以使用扩展的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:匹配一个数字,仅当它前面没有数字时。