3、Python 中的 re 模块的常用方法

点击上方分类专栏、进行系统性学习(文末可扫码领取资料)

0、flags 功能标志位(以下各方法均可传入该参数)

  • 功能标志位的作用是扩展正则表达的匹配功能。常用的flag
    • re.A:元字符只能匹配 ASCII 码
    • re.I:匹配时忽略字母大小写
    • re.S:使得.元字符可以匹配换行符
    • re.M:使^$可以匹配每一行的开头和结尾位置
  • 可以同时使用多个功能标志位,如flags=re.I|re.S

1、re.compile():生成正则表达式对象

  • regex=re.compile(pattern, flags=0)
    • pattern:正则表达式对象(字符串)
    • flags:功能标志位,扩展正则表达式的匹配
import re

pattern = r'(?:<b class=\"d_n\">)?[【\[]\d{3,5}[】\]](?:</b>)?'

#help(re.compile)
"""
compile(pattern, flags=0)
    Compile a regular expression pattern, returning a 
    Pattern object.
"""

re_pattern = re.compile(pattern)

# 查看 re_pattern 可使用的方法
#help(re_pattern)
#help(re_pattern.search)
"""
search(string, pos=0, endpos=9223372036854775807) method
of re.Pattern instance
    Scan through string looking for a match, and return a
    corresponding match object instance.
    
    Return None if no position in the string matches.
"""
#help(re_pattern.finditer)
"""
finditer(string, pos=0, endpos=9223372036854775807) method
of re.Pattern instance
    Return an iterator over all non-overlapping matches
    for the RE pattern in string.
    
    For each match, the iterator returns a match object.
"""

res = re_pattern.search("sadasd <b class='d_n'>xxx [1002] xxx </b> sdasd ")
# <class '_sre.SRE_Match'>
#print(type(res))

# ['end', 'endpos', 'expand', 'group', 'groupdict', 
<think>好的,我现在需要回答用户关于Python re模块常用方法的问题。用户希望得到详细解释和示例,所以我得先回顾一下re模块的主要函数,并确保每个方法的说明清晰,示例准确。 首先,用户提到了re模块常用方法,所以我需要列出最常用的几个,比如match、search、findall、finditer、sub、split、compile等。每个方法都需要解释其功能、参数、返回值以及使用场景。 接下来,我需要参考用户提供的引用内容。引用1到5中提到了search、findall、sub、compile等方法的示例,这些可以作为基础。但要注意用户可能已经看过这些示例,所以需要进一步补充更多细节,比如flags参数的不同选项,或者不同方法的区别,比如match和search的不同之处。 然后,我需要确保每个示例代码正确,并且符合Python的语法。例如,re.match只在字符串开头匹配,而search会扫描整个字符串。在示例中要体现出这一点。比如,当使用match匹配&#39;123abc&#39;时,可以得到结果,但如果字符串不是以模式开头,则返回None。 另外,用户可能需要知道如何处理分组,比如在sub中使用反向引用,或者在findall中返回分组匹配的内容。这些高级用法也应该提及,但不要过于复杂,保持重点在常用方法上。 还要注意,用户要求使用中文回答,所以所有的解释和注释都需要用中文。同时,行内公式如果有的话需要用$...$,但在这个问题中可能不需要数学公式,所以可能可以忽略这部分,但需要检查是否有变量名需要处理。 接下来,我需要组织回答结构,每个方法作为一个子标题,解释方法,参数,示例代码和输出。然后生成相关问题,确保问题覆盖常见的疑惑点,比如方法之间的区别,正则表达式中的贪婪模式,或者如何处理复杂匹配。 最后,检查引用是否正确添加。例如,在提到sub方法时,引用5和引用3都提供了示例,需要正确标注。同时确保引用标识在回答末尾自然出现,不要重复或遗漏。 现在开始整理每个方法的详细说明,确保每个部分都有示例代码,并且代码能够正确运行。例如,compile方法可以用来预编译正则表达式,提高效率,这在处理大量文本时很重要。然后,match、search等方法可以通过编译后的模式对象调用,或者直接通过re模块调用。 在写示例时,要展示不同情况下的输出,比如匹配成功和失败的情况,这样用户能更清楚方法的返回值类型。例如,re.match如果失败会返回None,而search成功则返回匹配对象。 此外,对于finditer和findall的区别,要说明finditer返回迭代器,适合处理大量匹配结果,而findall返回列表。同时,当正则表达式中有分组时,findall的行为会变化,这点需要特别指出,避免用户混淆。 最后,生成的相关问题需要围绕re模块的深入使用,比如性能优化、复杂正则的编写、常见错误处理等,帮助用户进一步学习。</think>### Python re模块常用方法详解 #### 1. **`re.match()`** - **功能**:从字符串**开头**尝试匹配正则表达式。 - **参数**:`pattern`(正则表达式),`string`(目标字符串),`flags`(匹配模式,如忽略大小写)。 - **返回值**:匹配成功返回`Match`对象,失败返回`None`。 - **示例**: ```python import re result = re.match(r&#39;\d+&#39;, &#39;123abc&#39;) # 匹配开头数字 print(result.group()) # 输出: 123 result = re.match(r&#39;\d+&#39;, &#39;abc123&#39;) # 开头无数字 print(result) # 输出: None ``` #### 2. **`re.search()`** - **功能**:扫描整个字符串,返回**第一个**匹配项[^1]。 - **参数**:同`re.match()`。 - **示例**: ```python result = re.search(r&#39;\d+&#39;, &#39;abc123def&#39;) # 找到第一个数字序列 print(result.group()) # 输出: 123 ``` #### 3. **`re.findall()`** - **功能**:返回所有非重叠匹配项的**列表**,支持分组捕获[^2]。 - **示例**: ```python result = re.findall(r&#39;\d+&#39;, &#39;1a22b333c&#39;) # 匹配所有数字序列 print(result) # 输出: [&#39;1&#39;, &#39;22&#39;, &#39;333&#39;] result = re.findall(r&#39;(\d)(\w)&#39;, &#39;1a2b3c&#39;) # 分组捕获 print(result) # 输出: [(&#39;1&#39;, &#39;a&#39;), (&#39;2&#39;, &#39;b&#39;), (&#39;3&#39;, &#39;c&#39;)] ``` #### 4. **`re.finditer()`** - **功能**:返回所有匹配项的**迭代器**(适合处理大量数据)。 - **示例**: ```python matches = re.finditer(r&#39;\d+&#39;, &#39;1a22b333c&#39;) for match in matches: print(match.group()) # 依次输出: 1, 22, 333 ``` #### 5. **`re.sub()`** - **功能**:替换所有匹配项,返回新字符串[^3][^5]。 - **参数**:`pattern`, `repl`(替换内容), `string`, `count`(最大替换次数)。 - **示例**: ```python text = "Python 2.7 发布于2010年,Python 3.0 发布于2008年" new_text = re.sub(r&#39;\d+\.\d+&#39;, &#39;X.Y&#39;, text) print(new_text) # 输出: Python X.Y 发布于2010年,Python X.Y 发布于2008年 # 使用函数作为替换内容 def replace_year(match): return str(int(match.group()) + 10) new_text = re.sub(r&#39;\d{4}&#39;, replace_year, "2023年计划") print(new_text) # 输出: 2033年计划 ``` #### 6. **`re.split()`** - **功能**:根据正则表达式分割字符串,返回列表。 - **示例**: ```python result = re.split(r&#39;\d+&#39;, &#39;a1b22c333d&#39;) # 按数字分割 print(result) # 输出: [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;] ``` #### 7. **`re.compile()`** - **功能**:预编译正则表达式,提升重复使用效率[^4]。 - **示例**: ```python pattern = re.compile(r&#39;\d+&#39;) # 编译正则 print(pattern.findall(&#39;abc123def456&#39;)) # 输出: [&#39;123&#39;, &#39;456&#39;] print(pattern.sub(&#39;X&#39;, &#39;abc123def456&#39;)) # 输出: abcXdefX ``` --- ### 方法对比表 | 方法 | 作用范围 | 返回值类型 | 适用场景 | |-------------|-------------|----------------|----------------------| | `match()` | 字符串开头 | `Match`或`None` | 验证输入格式 | | `search()` | 整个字符串 | `Match`或`None` | 查找首个匹配项 | | `findall()` | 整个字符串 | `list` | 提取所有匹配数据 | | `sub()` | 整个字符串 | `str` | 批量替换文本内容 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

融码一生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值