文章目录
Python的re
模块(正则表达式模块)提供了强大的正则表达式功能,用于在字符串中进行模式匹配和搜索替换。以下是re
模块的一些主要功能和用法:
正则表达式中的通配符(或称为元字符)都有哪些?
1. 主要功能
- 匹配:检查一个字符串是否符合某个模式。
- 查找:在字符串中查找符合某个模式的子串。
- 替换:在字符串中替换符合某个模式的子串。
2. 主要用法
-
re.match(pattern, string, flags=0):从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None。
-
re.search(pattern, string, flags=0):在字符串中查找第一个匹配模式的子串,并返回Match对象。如果没有找到,则返回None。
-
re.findall(pattern, string, flags=0):在字符串中查找所有匹配模式的子串,并返回一个列表。
-
re.finditer(pattern, string, flags=0):在字符串中查找所有匹配模式的子串,并返回一个迭代器,每个迭代器元素都是一个Match对象。
-
re.sub(pattern, repl, string, count=0, flags=0):在字符串中查找所有匹配模式的子串,并将其替换为repl指定的内容。
-
re.split(pattern, string, maxsplit=0, flags=0):根据模式分割字符串,并返回一个列表。
3. 示例代码及运行结果
当然可以。以下是一些额外的使用re
模块的正则表达式示例:
示例1:使用re.compile()编译正则表达式
import re
# 编译正则表达式
pattern = re.compile(r'\b\w+\b') # 匹配单词边界之间的单词
# 使用编译后的模式进行搜索
text = "Hello, world! This is a test."
matches = pattern.findall(text)
print(matches) # 输出: ['Hello', 'world', 'This', 'is', 'a', 'test']
示例2:使用re.search()查找匹配项并访问其属性
import re
# 使用re.search()查找第一个匹配项
match = re.search(r'(\d{3})-(\d{2})-(\d{4})', 'My phone number is 123-45-6789')
# 如果匹配成功,则访问其属性
if match:
print("Full match:", match.group()) # 输出: Full match: 123-45-6789
print("Group 1:", match.group(1)) # 输出: Group 1: 123
print("Group 2:", match.group(2)) # 输出: Group 2: 45
print("Group 3:", match.group(3)) # 输出: Group 3: 6789
示例3:使用re.sub()进行替换并指定替换函数
import re
# 使用re.sub()和替换函数将数字乘以2
def double_number(match):
value = int(match.group())
return str(value * 2)
text = "The numbers are 1, 2, and 3."
new_text = re.sub(r'\d+', double_number, text)
print(new_text) # 输出: The numbers are 2, 4, and 6.
示例4:使用re.split()按非字母字符分割字符串
import re
text = "Hello,world!Thisisatest."
words = re.split(r'\W+', text) # \W+ 匹配一个或多个非字母数字的字符
print(words) # 输出: ['Hello', 'world', 'This', 'is', 'a', 'test', '']
示例5:使用re.findall()查找重叠匹配项
import re
result = re.findall(r'\d+', 'abc123def456') # 查找所有匹配的数字
print(result) # 输出: ['123', '456']
示例6:使用re.match()从起始位置匹配数字
import re
match_obj = re.match(r'\d+', '123abc') # 从起始位置匹配数字
if match_obj:
print(match_obj.group()) # 输出: 123
else:
print('No match')
注意:在上面的示例中,正则表达式模式使用了原始字符串(在字符串前加r
),这样可以避免在正则表达式中解释反斜杠\
为转义字符。
同时,\d+
是一个正则表达式模式,表示匹配一个或多个数字。