文章目录
感觉没啥必要积累了,建议有需求直接gpt,文章内容看个乐子吧:)
一、概念
正则表达式(Regular Expression,regex 或 regexp)是一种用于描述字符串模式的工具。它是通过定义字符串的特定模式来查找、匹配和处理文本的一种方法。
正则表达式通常用于文本处理、数据验证、搜索和替换。
二、用法自查
2.1 字符直接匹配
普通字符,如 a, b, 1, &, @
,直接匹配相应的字符。括号除外,括号 ()
有捕获组的含义
2.3 字母或数字匹配
[abc]
: 匹配字符 a、b 或 c 中的任何一个。
[a-z]
: 匹配任何小写字母。
[0-9]
: 匹配任何数字字符。
2.2 特殊匹配
.
: 匹配任何单个字符(除换行符外)。
\d
: 匹配任何数字字符(\d
的作用等于 [0-9]
)。
\D
: 匹配任何非数字字符。
\w
: 匹配任何字母、数字或下划线(等于 [a-zA-Z0-9_])。
\W
: 匹配任何非字母、非数字或非下划线字符。
\s
: 匹配任何空白字符(包括空格、制表符、换行符等)。
\S
: 匹配任何非空白字符。
2.4 匹配次数
*
: 匹配前面的元素零次或多次,通常和 .*
一起使用。
+
: 匹配前面的元素一次或多次。
?
: 匹配前面的元素零次或一次。
{n}
: 匹配前面的元素恰好 n 次。
{n,}
: 匹配前面的元素至少 n 次。
{n,m}
: 匹配前面的元素至少 n 次,最多 m 次。
2.5 匹配位置
^
: 匹配字符串的开始。
$
: 匹配字符串的结束。
\b
: 匹配单词边界。
\B
: 匹配非单词边界。
2.6 分组和捕获
()
: 用于分组和捕获。分组允许你对多个字符进行操作(如量词),捕获可以提取匹配的子字符串。
(?:...)
: 用于非捕获分组,即仅进行分组,不捕获匹配的内容。
2.7 转义
用于转义特殊字符,使其被视为普通字符,例如 \.
匹配点号本身。
三、举例
3.1 邮箱
匹配邮箱地址:qiuyujiancqupt@163.com
^\w+@\w+\.\w+$
^
表示开始
\w+
表示一个或多个字母、数字或下划线
@
表示字符 @
\w+
表示域名部分
\.
表示点号
\w+
表示顶级域名
$
表示结束
3.2 日期
匹配日期格式 YYYY-MM-DD,并捕获年、月、日。
(\d{4})-(\d{2})-(\d{2})
3.3 提取关键字后的数字
需提取温度后的温度值:temperature: 23.5 (C)
使用正则表达式提取:
match = re.search(r': (.*) \(C\)', line)
r' xxxx '
两个分号中间的字符串表示为“原始字符串”(忽略反斜杠 \
的转义功能)
:
匹配冒号加空格,这意味着搜索的目标字符串中应该有一个冒号和一个空格。
(.*)
------()
小括号表示一个捕获组。为了将匹配的内容提取(温度值)。
------.*
点号表示匹配尽可能多的字符(除了换行符),直到下一个明确的匹配符号。
\(C\)
圆括号需要用反斜杠来转义(否则就成了捕获组了),故\(
和 \)
用来匹配圆括号本身。C 是普通字符,所以它将匹配字母 C。
故此行python代码中的正则表达式匹配的模式是:
- 从左往右,匹配一个冒号加空格
:
, - 由
.*
匹配一段尽可能多的字符 \(C\)
迫使.*
停止匹配,因为\(C\)
是下一个必须匹配的部分。最后是(C)
。
总结
持续更新积累