re标准模块

第一章、正则表达式规则

        在正则表达式中,{} 用于表示重复模式的次数,比如 {n} 表示前一个模式重复 n 次。但是,{} 本身并不支持嵌套使用,例如 {2}{3} 并不是合法的语法。
        如果想要实现一个模式重复的次数是另一个模式重复次数的倍数,可以使用括号和 * 或 + 等符号来组合表达式。
例如,要匹配连续两次重复三次的模式,可以使用括号和 * 来表示:

  • (pattern){3}:表示重复 pattern 三次。
  • ((pattern){3}){2}:表示重复连续两次重复 pattern 三次的模式。

示例:

import re

text = "hellohellohellohello"

pattern = r'(hello){3}'
match = re.search(pattern, text)
if match:
    print("Pattern found:", match.group())

这个示例中,(hello){3} 表示匹配连续三次的 hello,然后我们可以根据实际需求嵌套这种表达式来实现复杂的匹配模式。

在正则表达式中,*+? 是用来指示匹配模式重复次数的特殊字符。

  • * 表示前一个模式可以出现 0 次或多次。
  • + 表示前一个模式可以出现 1 次或多次。
  • ? 表示前一个模式可以出现 0 次或 1 次,也可以用来表示非贪婪匹配。

这三个符号是用于指示重复次数的,它们可以单独使用,也可以和其他正则表达式组合使用。例如,* 可以和其他模式一起使用来匹配零次或多次前一个模式,+ 可以匹配一次或多次,? 则可以表示可选的模式(0 次或 1 次),同时也可以用来表示非贪婪匹配。
贪婪匹配会尽可能多地匹配符合条件的文本,而非贪婪匹配则会尽可能少地匹配。在正则表达式中,*+? 后面可以加上 ? 符号,表示非贪婪匹配。
示例:

  • *?:表示匹配模式零次或多次,并且是非贪婪匹配。
  • +?:表示匹配模式一次或多次,并且是非贪婪匹配。
  • ??:表示匹配模式零次或一次,并且是非贪婪匹配。

例如,如果有字符串 "abcde",可以使用 .*? 来匹配最短的可能的字符串,即空字符串。而使用 .* 则会匹配整个字符串 "abcde"

import re

text = "abcde"

pattern1 = ".*?"
pattern2 = ".*"

match1 = re.search(pattern1, text)
match2 = re.search(pattern2, text)

print("Non-greedy match:", match1.group())  # 输出:''
print("Greedy match:", match2.group())     # 输出:abcde

在正则表达式中,? 在不同的位置和语境下可以表示不同的含义,但最常见的是表示非贪婪匹配

第二章、re标准模块

一、概述

re 是 Python 中用于处理正则表达式的内置模块。正则表达式是一种强大的文本匹配和搜索工具,可以用于检查字符串中是否包含特定模式的文本、替换文本、提取信息等操作。
主要函数:

  1. re.search(pattern, string) 在字符串中搜索指定模式的匹配项,返回第一个匹配对象。
  2. re.match(pattern, string) 在字符串开头匹配指定模式,如果开头就匹配到,则返回匹配对象。
  3. re.findall(pattern, string) 在字符串中找到所有匹配的子串,并返回一个列表。
  4. re.finditer(pattern, string) 在字符串中找到所有匹配的子串,并返回一个迭代器。
  5. re.sub(pattern, repl, string) 在字符串中搜索指定模式的匹配项,并用替换文本 repl 替换它们。

常用方法:

  • group() 返回匹配的字符串。
  • start() 返回匹配的起始位置。
  • end() 返回匹配的结束位置。
  • span() 返回一个元组,包含匹配的起始和结束位置。

示例:

import re

text = "Hello, my phone number is 123-456-7890. Call me!"
print(text.__len__()) # 48

# 在文本中查找匹配项
match = re.search(r'\d{3}-\d{3}-\d{4}', text)
if match:
    print("Phone number found:", match.group()) ## Phone number found: 123-456-7890
    print("Start position:", match.start()) # Start position: 26
    print("End position:", match.end()) # End position: 38

这段代码使用了 re.search() 来在文本中搜索一个电话号码的模式。如果找到匹配项,就会打印出匹配的字符串以及它的起始和结束位置。
正则表达式是一种强大的文本处理工具,可以进行复杂的模式匹配和提取,但也需要一定的学习和理解成本。在处理文本时,re 模块是一个强大的工具,能够帮助你实现各种文本处理需求。

import re
# result = re.search(r"\d+", "ab12db$")
# print(result)

st = "aac##xyz"
match = re.search(r"(^a*)(c.*)#(XY)", st, re.I)
# Match对象
print("====================match对象====================")
print(match) # 
# 匹配时使用的Pattern对象(正则表达式)
print("====================匹配时使用的Pattern对象(正则表达式)====================")
print(match.re) # re.compile('(^a*)(c.*)#(XY)', re.IGNORECASE)
# 正则表达式搜索文本的开始位置
print("====================正则表达式搜索文本的开始位置====================")
print(match.pos)
# 正则表达式搜索文本的结束位置
print("====================正则表达式搜索文本的结束位置====================")
print(match.endpos)
# 待匹配的文本
print("====================待匹配的文本====================")
print(match.string)
# 匹配字符串在原始字符串的开始位置
print("====================匹配字符串在原始字符串的开始位置====================")
print(match.start())
# 匹配字符串在原始字符串的结束位置
print("====================匹配字符串在原始字符串的结束位置====================")
print(match.end())
# 匹配区域,返回(start(), end())
print("====================匹配区域,返回(start(), end())====================")
print(match.span())
# 获取匹配后的字符串
print("====================获取匹配后的字符串====================")
print(match.group())
# 获取每部分匹配的字符串,元祖类型
print("====================获取每部分匹配的字符串,元祖类型====================")
print(match.groups())

详解Python正则表达式(含丰富案例)-CSDN博客

你可能感兴趣的:(Python标准模块,python)