正则表达式

Regular Expressions Regex

一、基本语法

1. 基础匹配

2. 标志 Flags

unknown
/ Regex /g  global 
/ Regex /m  multiline
/ Regex /i  case insensitive

3. 重复匹配 Repetitions

大括号 {} Curly Braces :在该字符的末尾

unknown
[0-9]{2,}  //匹配文本中,位数至少为 2 的阿拉伯数字

4. 分组 Grouping

括号 () 分组,我们可以对一个表达式进行分组,并用这些分组来引用或执行一些规则。为了给表达式分组,我们需要将文本包裹在  ()  中。 -\n 表示第 n 个分组

括号  (?:group) 非捕获分组:对表达式进行分组,但是不被引用捕获

unknown
(ha)-\1,(haa)-\2      \\ ha-ha,haa-haa 
(?:ha)-ha,(haa)-\1     \\  ha-ha,haa-haa

5. 特殊

unknown
^[0-9]    //  仅查找行首的数字
html$     // 在行末出现的 html

6. 预定义字符

简写 含义 等价于
\d 数字 [0-9]
\D 非数字 [^0-9]
\w 单词字符(字母、数字、下划线) [A-Za-z0-9_]
\W 非单词字符 [^A-Za-z0-9_]
\s 空白字符(空格、制表符、换行等) [\t\n\r\f\v]
\S 非空白字符 [^\t\n\r\f\v]

7. 零宽断言 Lookarounds

希望正在写的词语出现在另一个词语之前或之后

lookahead 先行断言
unknown
Date: 4 Aug 3PM 
\d+(?=PM)     // 得到 3 
\d+(?!PM)     // 得到 4 
lookbehind 后行断言
unknown
Product Code: 1064 Price: $5 

(?<=\$)\d+  //5  正向后行断言 匹配前面带有 $ 的数字 

(?<!\$)\d+  //1064  负向后行断言

8. 匹配 Matching

二、Python 使用

python
import re
API 作用 返回值
re.search(pattern, text) 在任意位置找第一次匹配 Match 对象或 None
re.match(pattern, text) 只在开头匹配 Match 对象或 None
re.fullmatch(pattern, text) 整段必须完全匹配 Match 对象或 None
re.findall(pattern, text) 返回所有匹配片段的列表 List list[str]
re.finditer(pattern, text) 返回迭代器(省内存) Iterator[Match]
re.sub(pattern, repl, text, count=0) 替换 替换后的字符串

实际使用

unknown
[\u4e00-\u9fa5]   匹配中文文本

实际例子:
正则表达式实现 Obsidian 路径批量更新

参考资料

交互式学习网站:https://regexlearn.com/

// 图片点击放大