在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