工具网站:RegExr: Learn, Build, & Test RegEx
正则表达式(Regular Expression, Regex)是一种强大的字符串匹配工具,广泛用于文本搜索、数据处理和输入验证等场景。无论是 Python、Java、JavaScript 还是 Shell 脚本,Regex 都是不可或缺的技能。
本文将深入介绍正则表达式的各种用法,包括:
^
$
\b
{}
*
+
?
[]
[^]
阅读完本教程,你将掌握正则表达式的核心知识,并能够熟练运用它解决实际问题。
正则表达式由普通字符和特殊字符组成。
符号 | 作用 | 示例 | 匹配结果 |
---|---|---|---|
a |
匹配字母 a |
hello 中的 l |
l |
abc |
匹配连续字符串 abc |
abcdef |
abc |
\d |
任意数字 [0-9] |
a1b2c3 |
1 2 3 |
\w |
单词字符 [a-zA-Z0-9_] |
var_name123 |
var_name123 |
\s |
空白字符(空格、Tab、换行) | hello world |
空格 |
示例
import re
text = "My phone number is 123-456-7890"
pattern = r"\d{3}-\d{3}-\d{4}"
print(re.findall(pattern, text)) # 输出: ['123-456-7890']
^
$
\b
- 位置匹配^
(匹配行首)^hello
匹配以 "hello" 开头的字符串:
hello world
world hello
$
(匹配行尾)world$
匹配以 "world" 结尾的字符串:
hello world
world hello
\b
(单词边界)\bcat\b
匹配独立的 "cat"(前后不是字母或数字):
I have a cat.
catalog
(不是完整单词)*
+
?
{}
*
(匹配 0 次或多次)ab*
匹配 "a" 后面跟 0 个或多个 "b":
a
ab
abb
+
(匹配 1 次或多次)ab+
匹配 "a" 后面跟 1 个或多个 "b":
a
ab
abb
?
(匹配 0 或 1 次,可选)colou?r
匹配 "color" 或 "colour"(u 可选):
color
colour
{n,m}
(匹配 n 到 m 次)\d{2,4}
匹配 2 到 4 位数字:
12
123
1234
1
(太短)12345
(太长)[]
和 取反 [^]
[]
(匹配括号内的任意字符)gr[ae]y
匹配 "gray"
或 "grey"
。
[^]
(匹配不在括号中的字符)[^aeiou]
匹配非元音字母:
b
a
".*"
匹配 最长 的字符串:
He said, "Hello world!"
:
"Hello world!"
*?
+?
??
)".*?"
匹配 最短 的字符串:
He said, "Hello world!"
:
"Hello"
()
与反向引用 \1
(\d{3})-(\d{3})-(\d{4})
匹配 电话号码,分组:
\1
:前三位\2
:中间三位\3
:最后四位(\w+)\s+\1
匹配连续重复的单词:
hello hello
hello world
(?=...)
与 后顾 (?<=...)
\d+(?= dollars)
匹配前面是数字,后面是 "dollars" 的数字:
100 dollars
100 yen
\d+(?! dollars)
匹配前面是数字,后面不是 "dollars":
100 yen
100 dollars
(?<=\$)\d+
匹配前面是 $
的数字:
$100
100
1[3-9]\d{9}
<(\w+)>(.*?)\1>
[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}