在Python中,正则表达式相关的函数主要定义在re
模块中。以下是一些常用的正则表达式函数及其说明:
正则表达式基本语法
1. 元字符
.
:匹配除换行符外的任何单个字符。
-
- 示例:
a.b
可以匹配acb
、a1b
等。
- 示例:
^
:匹配字符串的开始。
-
- 示例:
^Hello
匹配以Hello
开始的字符串。
- 示例:
$
:匹配字符串的结束。
-
- 示例:
world$
匹配以world
结束的字符串。
- 示例:
*
:匹配前面的字符零次或多次。
-
- 示例:
a*
匹配""
、"a"
、"aa"
等。
- 示例:
+
:匹配前面的字符一次或多次。
-
- 示例:
a+
匹配"a"
、"aa"
,但不匹配""
。
- 示例:
?
:匹配前面的字符零次或一次。
-
- 示例:
a?
匹配""
或"a"
。
- 示例:
{n}
:匹配前面的字符恰好 n 次。
-
- 示例:
a{2}
匹配"aa"
。
- 示例:
{n,}
:匹配前面的字符至少 n 次。
-
- 示例:
a{2,}
匹配"aa"
、"aaa"
等。
- 示例:
{n,m}
:匹配前面的字符至少 n 次,且不超过 m 次。
-
- 示例:
a{1,3}
匹配"a"
、"aa"
、"aaa"
。
- 示例:
2. 字符类
[...]
:匹配字符集中的任意一个字符。
-
- 示例:
[abc]
匹配a
、b
或c
。
- 示例:
[^...]
:匹配不在字符集中的任意字符。
-
- 示例:
[^abc]
匹配除a
、b
、c
以外的字符。
- 示例:
\d
:匹配任何数字,等同于[0-9]
。
-
- 示例:
\d+
匹配一个或多个数字。
- 示例:
\D
:匹配任何非数字字符。
-
- 示例:
\D+
匹配一个或多个非数字字符。
- 示例:
\w
:匹配任何字母数字字符,等同于[a-zA-Z0-9_]
。
-
- 示例:
\w+
匹配一个或多个字母数字字符。
- 示例:
\W
:匹配任何非字母数字字符。
-
- 示例:
\W+
匹配一个或多个非字母数字字符。
- 示例:
\s
:匹配任何空白字符,包括空格、制表符等。
-
- 示例:
\s+
匹配一个或多个空白字符。
- 示例:
\S
:匹配任何非空白字符。
-
- 示例:
\S+
匹配一个或多个非空白字符。
- 示例:
3. 断言
(?=...)
:正向预测,检查后面是否匹配某模式,但不消耗字符。
-
- 示例:
a(?=b)
匹配a
,后面跟着b
。
- 示例:
(?!...)
:负向预测,检查后面是否不匹配某模式。
-
- 示例:
a(?!b)
匹配a
,后面不跟b
。
- 示例:
4. 分组
(...)
:用于分组,可以应用量词或捕获匹配结果。
-
- 示例:
(abc)+
匹配一个或多个abc
。
- 示例:
5. 示例代码
下面是一个使用Python的正则表达式示例,演示如何使用上述语法:
import re text = "Hello 123, this is a test: http://example.com/abc." # 示例匹配数字
numbers = re.findall(r'\d+', text)
print("数字:", numbers) # 输出: 数字: ['123'] # 示例以Hello开头的字符串
if re.match(r'^Hello', text): print("字符串以'Hello'开头") # 示例匹配URL
url_matches = re.findall(r'http://[a-zA-Z0-9./]+', text)
print("URL:", url_matches) # 输出: URL: ['http://example.com/abc'] # 示例匹配以abc结束的字符串
if re.search(r'abc\.', text): print("字符串中包含以'abc.'结尾的部分")
常用正则表达式函数
在Python中,正则表达式相关的函数主要定义在 re
模块中。以下是一些常用的正则表达式函数及示例:
1. re.match()
- 描述:从字符串的开始位置匹配一个模式。
- 示例:
import re result = re.match(r'Hello', 'Hello, world!')
if result: print("匹配成功:", result.group()) # 输出: 匹配成功: Hello
2. re.search()
- 描述:在整个字符串中搜索第一个匹配。
- 示例:
result = re.search(r'world', 'Hello, world!')
if result: print("匹配成功:", result.group()) # 输出: 匹配成功: world
3. re.findall()
- 描述:返回字符串中所有与模式匹配的非重叠部分。
- 示例:
result = re.findall(r'\d+', 'There are 42 apples and 365 oranges.')
print("匹配结果:", result) # 输出: 匹配结果: ['42', '365']
4. re.finditer()
- 描述:返回一个匹配对象的迭代器。
- 示例:
for match in re.finditer(r'\d+', 'There are 42 apples and 365 oranges.'): print("匹配结果:", match.group()) # 输出: 42, 365
5. re.sub()
- 描述:替换字符串中所有匹配的部分。
- 示例:
result = re.sub(r'apples', 'bananas', 'There are 42 apples and 365 oranges.')
print("替换结果:", result) # 输出: 替换结果: There are 42 bananas and 365 oranges.
6. re.split()
- 描述:根据模式分割字符串。
- 示例:
result = re.split(r'[,\s;.]', 'one, two; three.four five')
print("分割结果:", result) # 输出: ['one', 'two', 'three', 'four', 'five']
7. re.compile()
- 描述:将正则表达式编译为对象以提高后续匹配效率。
- 示例:
pattern = re.compile(r'\d+')
result = pattern.findall('There are 42 apples and 365 oranges.')
print("匹配结果:", result) # 输出: 匹配结果: ['42', '365']
8. re.fullmatch()
- 描述:检查整个字符串是否与模式完全匹配。
- 示例:
result = re.fullmatch(r'\d+', '1234')
if result: print("完全匹配成功:", result.group()) # 输出: 完全匹配成功: 1234
9. re.escape()
- 描述:转义所有正则表达式中的特殊字符。
- 示例:
text = "1 + 2 = 3"
escaped_text = re.escape(text)
print("转义结果:", escaped_text) # 输出: 转义结果: 1\ +\ 2\ =\ 3