Python正则

正则表达式(Regular Expressions,简称 regex)是一种强大的文本处理工具,可以用于搜索、替换和解析字符串。Python 的 re 模块提供了对正则表达式的支持。以下是一些基本用法和示例:

导入 re 模块

首先,你需要导入 Python 的 re 模块:

import re

基本匹配

匹配单个字符
  • . 匹配除换行符以外的任意单个字符。
  • [] 匹配括号内的任意一个字符。例如 [abc] 匹配 abc
  • [^...] 匹配不在括号内的任意字符。例如 [^abc] 匹配除了 abc 之外的任意字符。
匹配特定字符集
  • \d 匹配任意一个数字,等价于 [0-9]
  • \D 匹配任意一个非数字字符,等价于 [^0-9]
  • \w 匹配任意一个字母、数字或下划线,等价于 [A-Za-z0-9_]
  • \W 匹配任意一个非字母、非数字或非下划线字符,等价于 [^A-Za-z0-9_]
  • \s 匹配任意一个空白字符(如空格、制表符等)。
  • \S 匹配任意一个非空白字符。
匹配数量
  • * 匹配前面的字符零次或多次。例如 a* 匹配 aaaaaa 等。
  • + 匹配前面的字符一次或多次。例如 a+ 匹配 aaaaaa 等,但不匹配空字符串。
  • ? 匹配前面的字符零次或一次。例如 a? 匹配 a 或空字符串。
  • {n} 匹配前面的字符恰好 n 次。例如 a{3} 匹配 aaa
  • {n,} 匹配前面的字符至少 n 次。例如 a{2,} 匹配 aaaaaaaaa 等。
  • {n,m} 匹配前面的字符至少 n 次,至多 m 次。例如 a{2,4} 匹配 aaaaaaaaa
位置匹配
  • ^ 匹配字符串的开始位置。
  • $ 匹配字符串的结束位置。
  • \b 匹配单词边界。
  • \B 匹配非单词边界。

示例

匹配邮箱地址
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
email = "[email protected]"

if re.match(pattern, email):
    print("Valid email address")
else:
    print("Invalid email address")
提取所有数字
text = "There are 123 apples and 456 oranges."
numbers = re.findall(r'\d+', text)
print(numbers)  # 输出: ['123', '456']
替换字符串中的特定模式
text = "Hello, world! Hello, Python!"
new_text = re.sub(r'Hello', 'Hi', text)
print(new_text)  # 输出: "Hi, world! Hi, Python!"

编译正则表达式

为了提高效率,特别是当你需要多次使用同一个正则表达式时,可以使用 re.compile 编译它:

pattern = re.compile(r'\d+')
text = "There are 123 apples and 456 oranges."
numbers = pattern.findall(text)
print(numbers)  # 输出: ['123', '456']

分组和命名组

分组

使用圆括号 () 可以创建分组,分组在匹配结果中会作为一个单独的元素返回。

pattern = r'(\d{3})-(\d{2})-(\d{4})'
text = "My phone number is 123-45-6789."
match = re.search(pattern, text)
if match:
    print(match.groups())  # 输出: ('123', '45', '6789')
命名组

使用 (?P...) 语法可以创建命名组。

pattern = r'(?P\d{3})-(?P\d{2})-(?P\d{4})'
text = "My phone number is 123-45-6789."
match = re.search(pattern, text)
if match:
    print(match.groupdict())  # 输出: {'area': '123', 'prefix': '45', 'line': '6789'}

总结

正则表达式是一种非常强大的工具,但也需要一定的学习和实践才能熟练掌握。Python 的 re 模块提供了丰富的功能,使得在 Python 中使用正则表达式变得非常方便。希望这些示例和解释能帮助你更好地理解和使用正则表达式。

你可能感兴趣的:(python,python,开发语言,Python基础,学习,python学习)