正则表达式中的特殊字符
- 字符类
- 预定义字符类
- 量词
- 锚点
- 分组和捕获
- 选择、分支和条件
- 反义和否定
- 转义字符
- 示例
这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。
作者:神的孩子都在歌唱
在正则表达式中,有许多特殊字符用于定义匹配模式。以下是常用的正则表达式特殊字符及其解释。
字符类
[]
:定义字符类,用于匹配方括号内的任意一个字符。- 示例:
[abc]
匹配a
、b
或c
。
- 示例:
-
:在字符类中表示范围。- 示例:
[a-z]
匹配任何小写字母。
- 示例:
预定义字符类
.
:匹配除换行符外的任意一个字符。\d
:匹配任意一个数字,等价于[0-9]
。\D
:匹配任意一个非数字字符,等价于[^0-9]
。\w
:匹配任意一个单词字符(字母、数字或下划线),等价于[a-zA-Z0-9_]
。\W
:匹配任意一个非单词字符,等价于[^a-zA-Z0-9_]
。\s
:匹配任意一个空白字符(空格、制表符、换行符等)。\S
:匹配任意一个非空白字符。
量词
*
:匹配前面的字符零次或多次。- 示例:
a*
匹配""
、a
、aa
、aaa
等。
- 示例:
+
:匹配前面的字符一次或多次。- 示例:
a+
匹配a
、aa
、aaa
等。
- 示例:
?
:匹配前面的字符零次或一次。- 示例:
a?
匹配""
或a
。
- 示例:
{n}
:匹配前面的字符恰好n
次。- 示例:
a{3}
匹配aaa
。
- 示例:
{n,}
:匹配前面的字符至少n
次。- 示例:
a{2,}
匹配aa
、aaa
、aaaa
等。
- 示例:
{n,m}
:匹配前面的字符至少n
次且至多m
次。- 示例:
a{2,4}
匹配aa
、aaa
或aaaa
。
- 示例:
锚点
^
:匹配字符串的开始。- 示例:
^abc
匹配以abc
开头的字符串。
- 示例:
$
:匹配字符串的结束。- 示例:
abc$
匹配以abc
结尾的字符串。
- 示例:
\b
:匹配单词边界。- 示例:
\bword\b
匹配word
,但不匹配sword
或words
。
- 示例:
\B
:匹配非单词边界。- 示例:
\Bword\B
匹配swordsmith
中的word
。
- 示例:
分组和捕获
()
:定义分组,并捕获匹配的子字符串。- 示例:
(abc)
匹配并捕获abc
。
- 示例:
(?:)
:定义分组,但不捕获匹配的子字符串。- 示例:
(?:abc)
匹配但不捕获abc
。
- 示例:
选择、分支和条件
|
:表示选择或分支。- 示例:
a|b
匹配a
或b
。
- 示例:
(?=...)
:正向前瞻断言,匹配...
前的位置。- 示例:
a(?=b)
匹配a
,但仅当a
后面跟着b
。
- 示例:
(?!...)
:负向前瞻断言,匹配不为...
前的位置。- 示例:
a(?!b)
匹配a
,但仅当a
后面不跟着b
。
- 示例:
反义和否定
^
:在字符类中表示反义。- 示例:
[^abc]
匹配除a
、b
、c
之外的任意字符。
- 示例:
(?<=...)
:正向后瞻断言,匹配...
后的位置。- 示例:
(?<=a)b
匹配b
,但仅当b
前面是a
。
- 示例:
(?<!...)
:负向后瞻断言,匹配不为...
后的位置。- 示例:
(?<!a)b
匹配b
,但仅当b
前面不是a
。
- 示例:
转义字符
\
:用于转义特殊字符,使其作为普通字符处理。- 示例:
\.
匹配.
字符,而不是任意字符。
- 示例:
示例
以下是一些示例来展示如何使用上述特殊字符:
import re# 匹配任意单个字符
pattern = re.compile(r'.')
print(pattern.match('a').group()) # 输出: a# 匹配任意数字
pattern = re.compile(r'\d')
print(pattern.match('5').group()) # 输出: 5# 匹配单词边界上的单词
pattern = re.compile(r'\bword\b')
print(pattern.search('A word in a sentence').group()) # 输出: word# 匹配以 abc 开头的字符串
pattern = re.compile(r'^abc')
print(pattern.match('abcde').group()) # 输出: abc# 匹配以 xyz 结尾的字符串
pattern = re.compile(r'xyz$')
print(pattern.search('123xyz').group()) # 输出: xyz# 匹配包含 "hello" 或 "world" 的字符串
pattern = re.compile(r'hello|world')
print(pattern.search('hello world').group()) # 输出: hello# 匹配以数字开头且包含一个或多个空白字符的字符串
pattern = re.compile(r'^\d\s+')
print(pattern.match('5 ').group()) # 输出: 5 # 匹配字符串中的邮箱地址
pattern = re.compile(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b')
print(pattern.search('My email is example@test.com').group()) # 输出: example@test.com
作者:神的孩子都在歌唱
本人博客:https://blog.csdn.net/weixin_46654114
转载说明:务必注明来源,附带本人博客连接。