• 周六. 4月 27th, 2024

Python 正则表达式用法详解

正则表达式是一种用于匹配、搜索或替换字符串中模式的工具。Python 的 re 模块提供了正则表达式功能。

下面是一些基本的正则表达式用法:





import re

# 匹配字符串中的数字
result = re.search(r'\d+', 'Hello, there are 3 dogs')
print(result.group())  # 输出 '3'

# 查找所有匹配的字符串
results = re.findall(r'\d+', 'There are 3 dogs and 2 cats')
print(results)  # 输出 ['3', '2']

# 替换字符串中的模式
string = 'There are 3 dogs and 2 cats'
new_string = re.sub(r'\d+', 'NUMBER', string)
print(new_string)  # 输出 'There are NUMBER dogs and NUMBER cats'

# 使用正则表达式分割字符串
results = re.split(r'\d+', 'There are 3 dogs and 2 cats')
print(results)  # 输出 ['There are ', ' dogs and ', ' cats']

# 使用正则表达式进行字符串匹配
match = re.match(r'\d+', '12345')
print(match.group())  # 输出 '12345'

你还可以使用正则表达式中的模式修饰符来修改匹配的行为。例如,re.I 修饰符可以使正则表达式匹配忽略大小写,re.S 修饰符可以使正则表达式匹配包括换行符在内的所有字符。





import re

# 匹配包括换行符在内的所有字符
result = re.search(r'.+', 'Hello,\nworld!', re.S)
print(result.group())  # 输出 'Hello,\nworld!'

# 在使用多个修饰符时,可以使用 "|" 运算符连接它们
result = re.search(r'hello', 'Hello, world!', re.I | re.S)
print(result.group())  # 输出 'Hello'

正则表达式还有许多其他的功能,例如使用括号进行分组、使用问号表示可选项、使用 *+ 运算符表示重复次数等。

阅读  Python 网络协议使用详解

正则表达式中使用括号进行分组可以方便我们对字符串进行操作。例如,我们可以使用括号将日期中的年、月、日分开,然后分别提取出来。





import re

# 使用括号进行分组
result = re.search(r'(\d{4})-(\d{2})-(\d{2})', 'Today is 2022-01-01')
print(result.groups())  # 输出 ('2022', '01', '01')

# 使用 group() 方法提取分组内容
print(result.group(1))  # 输出 '2022'
print(result.group(2))  # 输出 '01'
print(result.group(3))  # 输出 '01'

正则表达式中使用问号 ? 表示一个字符是可选的,也就是说它可以出现或不出现。例如,下面的正则表达式可以匹配含有或不含有千分位的数字:





import re

# 匹配含有或不含有千分位的数字
result = re.search(r'\d{1,3}(,\d{3})*', 'The number is 1,234 or 1234567')
print(result.group())  # 输出 '1,234'

result = re.search(r'\d{1,3}(,\d{3})*', 'The number is 1234567')
print(result.group())  # 输出 '1234567'

正则表达式中使用 *+ 运算符可以表示一个字符出现的次数。* 表示字符出现零次或多次,+ 表示字符出现一次或多次。

例如,下面的正则表达式可以匹配任意数量的 a 字符:





import re

# 匹配任意数量的 a 字符
result = re.search(r'a*', 'aaaab')
print(result.group())  # 输出 'aaaa'

result = re.search(r'a*', 'b')
print(result.group())  # 输出 ''

正则表达式中使用 + 运算符可以表示一个字符出现一次或多次。例如,下面的正则表达式可以匹配至少一个 a 字符:





import re

# 匹配至少一个 a 字符
result = re.search(r'a+', 'aaaab')
print(result.group())  # 输出 'aaaa'

result = re.search(r'a+', 'b')
print(result.group())  # 输出 None

正则表达式还有许多其他的功能,例如使用 {n} 表示字符出现恰好 n 次、使用 {n,} 表示字符出现至少 n 次、使用 {n,m} 表示字符出现至少 n 次且至多 m 次等。

阅读  python 元组的详细用法

正则表达式中使用 {n} 可以表示一个字符出现恰好 n 次。例如,下面的正则表达式可以匹配三个数字的字符串:





import re

# 匹配三个数字的字符串
result = re.search(r'\d{3}', '12345')
print(result.group())  # 输出 '123'

result = re.search(r'\d{3}', '1234')
print(result.group())  # 输出 None

正则表达式中使用 {n,} 可以表示一个字符出现至少 n 次。例如,下面的正则表达式可以匹配至少三个数字的字符串:





import re

# 匹配至少三个数字的字符串
result = re.search(r'\d{3,}', '12345')
print(result.group())  # 输出 '12345'

result = re.search(r'\d{3,}', '1234')
print(result.group())  # 输出 None

正则表达式中使用 {n,m} 可以表示一个字符出现至少 n 次且至多 m 次。例如,下面的正则表达式可以匹配三到五个数字的字符串:





import re

# 匹配三到五个数字的字符串
result = re.search(r'\d{3,5}', '12345')
print(result.group())  # 输出 '12345'

result = re.search(r'\d{3,5}', '123456')
print(result.group())  # 输出 None

正则表达式还有许多其他的功能,正则表达式中还有许多其他的特殊字符可以使用。例如:

  • \d 表示任意数字,等价于 [0-9]
  • \D 表示任意非数字字符,等价于 [^0-9]
  • \w 表示任意字母数字字符,等价于 [a-zA-Z0-9_]
  • \W 表示任意非字母数字字符,等价于 [^a-zA-Z0-9_]
  • \s 表示任意空白字符,等价于 [\t\n\r\f\v]
  • \S 表示任意非空白字符,等价于 [^\t\n\r\f\v]
  • \b 表示单词边界,例如 \bcat\b 可以匹配 cat,但不能匹配 category
  • \B 表示非单词边界,例如 \Bcat\B 可以匹配 category 中的 cat,但不能匹配 cat
阅读  Python 性能优化的11个技巧

正则表达式还有许多其他的功能,例如使用转义字符 \ 表示特殊字符、使用方括号表示字符集合、使用括号表示分组、使用 | 运算符表示选择等。

总结可知:在 Python 中,正则表达式是一种用来匹配、搜索和替换字符串的工具。它使用一种称为“规则表达式”的特殊语法来定义匹配规则,并使用 Python 内置的 re 模块来执行匹配操作。

正则表达式可以用来做很多事情,例如:

  • 在字符串中查找特定的文本模式。
  • 在字符串中搜索和替换特定的文本模式。
  • 验证字符串是否符合特定的格式要求,例如电子邮件地址、日期格式等。

正则表达式使用起来可能略显复杂,但是它的强大功能和灵活性使它在很多场合都是非常有用的工具。