Python正则

        正则表达式(Regular Expression,简称 regex 或 regexp)是一种强大的文本匹配和处理工具,它使用一种特殊的语法模式来描述和定义字符串的搜索模式。主要用于在文本中搜索、匹配、替换符合某种模式的字符串,提供了非常灵活和高效的文本处理能力。

一、基本概念

1、元字符:

        元字符是正则表达式语法的基础,它们具有特殊的含义,例如:. 、^ 、$、\d、\w、\s等,用于匹配特定类型的字符或位置。

        菜鸟教程:正则表达式 – 元字符

2、字符类:

        字符类用于匹配一个字符集合,例如 [a-z] 表示匹配任意小写字母,[0-9] 表示匹配任意数字等。

3、量词:

        量词用于指定匹配的次数,例如 * (零次或多次)、+ (一次或多次)、?(零次或一次)、{n} (恰好n次)、{m, n} (至少m次,至多n次)等。

4、边界匹配:

        边界匹配用于指定匹配的位置,例如 ^ 表示字符串的开头,$ 表示字符串的结尾,\b 表示单词边界。

5、分组和捕获:

        使用圆括号 () 可以将正则表达式中的部分模式进行分组,并且可以捕获匹配的内容供后续使用。

6、反向引用:

        在正则表达式中,可以使用反向引用来引用前面捕获的分组内容。

7、特殊序列:

        特殊序列提供了一些便捷的方式来匹配常见的模式,例如 \d (匹配数字)、\s (匹配空白字符)、\w (匹配字母、数字或下划线)等。

二、常用函数、方法

1、re.compile(pattern, flags=0)

        编译正则表达式模式 pattern 成一个可重复使用的正则表达式对象。

        flags是可选的,用于指定匹配模式,如 re.IGNORECASE(忽略大小写)等。

import re

pattern = re.compile(r'\d+')  # 匹配数字的正则表达式

2、re.search(pattern, string, flags=0)

        在字符串 string 中搜索匹配正则表达式 pattern 的第一个位置,并返回一个匹配对象 match。

        如果找到匹配,则返回第一个匹配对象;如果没有找到匹配,则返回None

import re

match = re.search(r'\d+', 'abc123def')

if match:
    print(match.group())  # '123'

3、re.match(pattern, string, flags=0)

        尝试从字符串 string 的开头匹配正则表达式 pattern

        如果匹配成功,则返回一个匹配对象 match;如果不成功,则返回None

import re

match = re.match(r'\d+', 'abc123def')

if match:
    print(match.group())  # '123'

4、re.findall(pattern, string, flags=0)

        在字符串 string 中查找所有匹配正则表达式 pattern 的非重叠子字符串,并返回一个列表。

import re

results = re.findall(r'\d+', 'abc123def456')

print(results)  # ['123', '456']

5、re.finditer(pattern, string, flags=0)

        返回一个迭代器,迭代器生成在字符串 string 中所有与正则表达式 pattern匹配的匹配对象。

import re

iterator = re.finditer(r'\d+', 'abc123def456')

for match in iterator:
    print(match.group())  # '123' 和 '456'

6、re.sub(pattern, repl, string, count=0, flags=0)

        在字符串 string 中查找所有匹配正则表达式 pattern 的子字符串,并用repl替换它们。

        count 是可选参数,指定替换的最大次数。

import re

new_string = re.sub(r'\d+', 'NUM', 'abc123def456')

print(new_string)  # 'abcNUMdefNUM'

7、re.split(pattern, string, maxsplit=0, flags=0)

        根据正则表达式 pattern 分割字符串 string

        maxsplit 是可选参数,指定最大分割次数。

import re

parts = re.split(r'\d+', 'abc123def456')

print(parts)  # ['abc', 'def', '']

8、match.group()

        返回匹配的字符串。

        可以传入整数参数 group(i),返回第 i 个括号子组匹配的内容。

import re

match = re.search(r'(\d+)-(\d+)', '2024-07')

print(match.group())    # '2024-07'
print(match.group(1))   # '2024'
print(match.group(2))   # '07'

9、match.start()和match.end()

        分别返回匹配的子字符串的起始和结束位置的索引。

import re

match = re.search(r'\d+', 'abc123def')

print(match.start())  # 3
print(match.end())    # 6

10、match.span()

        返回一个元组,包含匹配的子字符串的起始和结束位置的索引。

import re

match = re.search(r'\d+', 'abc123def')

print(match.span())  # (3, 6)
注意事项:

1、在使用正则表达式时,特殊字符需要进行转义或使用原始字符串(以  开头)。

2、正则表达式的性能受到模式复杂度和数据量的影响,大数据量和复杂模式可能会导致性能下降。

3、使用re.compile(),可以预编译正则表达式,提高重复使用时的效率。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值