【Python】正则表达式

在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

相关推荐
老歌老听老掉牙1 小时前
空间曲线数据的拼接与几何变换分析
python·曲线
databook6 小时前
使用 SciPy 库进行时间序列分析
python·数据分析·scipy
java资料站6 小时前
十一、评估测试
开发语言·人工智能·python
szial6 小时前
网络爬虫与 CDP 实战(二):浏览器能访问,Python 却被拒绝?拆开登录态与 CSRF
爬虫·python·csrf
青少儿编程课堂7 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
怕浪猫7 小时前
LLM 面试必问的 8 个问题,答不上来直接淘汰
人工智能·python·面试
老歌老听老掉牙8 小时前
从三维旋转的深度解析到Python实现:绕任意轴旋转的奥秘
python·三维旋转
打工仔折腾 AI8 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
梦幻精灵_cq9 小时前
sumdir——一个伪python.built-in的“术法”打造
python
weixin_4407305010 小时前
函数return、参数、参数组、递归函数、高阶函数等小结
开发语言·python