Python的re模块进行正则表达式操作时的常用方法[回顾学习]

re 模块是 Python 中用于处理正则表达式的标准库模块。通过 re 模块,可进行字符串匹配、搜索和替换等各种操作。
有几个常用的方法:
# re.match(pattern, string):从字符串开头开始匹配模式,并返回匹配对象。适合用于确定字符串是否以指定模式开头。
# re.search(pattern, string):在整个字符串中搜索匹配模式,返回第一个匹配对象。适合用于查找字符串中的某个模式。
# re.findall(pattern, string):返回所有非重叠的匹配项列表,不返回匹配对象。适合用于找到所有匹配项。
# re.finditer(pattern, string):返回一个迭代器,包含所有匹配对象,需要通过迭代来访问每个匹配对象。
# re.sub(pattern, repl, string):替换字符串中的模式匹配项为指定的替换文本。
# re.split(pattern, string):根据模式将字符串拆分为子串,返回拆分后的子串列表。

import re
# 原始字符串
text = "Hello, my email is example123@email.com"
# 定义要搜索的模式
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
# 搜索模式匹配的内容
matches = re.findall(pattern, text)
print("Emails found in the text:")
for match in matches:
    print(match)
# 替换匹配的内容
new_text = re.sub(pattern, "REPLACED_EMAIL", text)
print("\nAfter replacing emails:")
print(new_text)

import re
text = "Today is 2024-03-22"
pattern = r"(\d{4})-(\d{2})-(\d{2})"
match = re.search(pattern, text)
if match:
    print("Found:", match.group())      # 所有匹配内容
    print("Year:", match.group(1))       # 第一个分组,即年份
    print("Month:", match.group(2))      # 第二个分组,即月份
    print("Day:", match.group(3))        # 第三个分组,即日期

# Python 的 re 模块提供了一系列方法,用于处理正则表达式。以下是 re 模块中常用的方法及其用途的详细例举:
# re.search(pattern, string, flags=0):
# 用途:在字符串中搜索指定的模式。
import re
text = "The quick brown fox jumps over the lazy dog fox"
pattern = r"fox"
match = re.search(pattern, text)
if match:
    print("Found:", match.group())

# re.match(pattern, string, flags=0):
# 用途:从字符串开头开始匹配指定的模式。re.match() 方法,您可以有效地从字符串开头匹配指定模式并提取所需的部分
import re
text = "apple orange banana"
pattern = r"apple"
match = re.match(pattern, text)
if match:
    print("Found:", match.group())

import re
text = "2024-03-22"
pattern = r"(\d{4})-(\d{2})-(\d{2})"
match = re.match(pattern, text)
if match:
    print("Found:", match.group())      # 整个匹配内容
    print("Year:", match.group(1))       # 第一个分组,即年份
    print("Month:", match.group(2))      # 第二个分组,即月份
    print("Day:", match.group(3))        # 第三个分组,即日期


# re.findall(pattern, string, flags=0):
# 用途:查找字符串中所有与模式匹配的子串,并返回一个列表。
import re
text = "The cat and the hat sat flat on the mat"
pattern = r"\b\w{3}\b"  # 匹配长度为3的单词
matches = re.findall(pattern, text)
print("Matches:", matches)

# re.sub(pattern, repl, string, count=0, flags=0):
# 用途:替换字符串中与模式匹配的部分。
# import re
# text = "Hello, my email is example123@email.com"
# pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
# new_text = re.sub(pattern, "REPLACED_EMAIL", text)
# print("New text:", new_text)

# re.split(pattern, string, maxsplit=0, flags=0):
# 用途:根据模式将字符串分割成子串,并返回一个列表。
import re
text = "apple,orange,banana,pear"
pattern = r","
parts = re.split(pattern, text)
print("Parts:", parts)


# re.finditer(pattern, string) 是 re 模块中用于在字符串中查找所有匹配项的方法。
# 它返回一个迭代器,该迭代器包含所有匹配的对象,您可以通过迭代来访问每个匹配对象并获取相关信息。
import re
text = "apple orange apple banana apple"
pattern = r"apple"
matches = re.finditer(pattern, text)
for match in matches:
    start_index = match.start()  # 匹配起始索引
    end_index = match.end()      # 匹配结束索引
    matched_text = match.group() # 匹配的文本
    print(f"Found '{matched_text}' at position {start_index}-{end_index}")
# Found 'apple' at position 0-5
# Found 'apple' at position 13-18
# Found 'apple' at position 26-31

 使用正则表达式来匹配不同格式的电话号码,并进行格式化:

import re

# 定义匹配电话号码的正则表达式
phone_numbers = [
    "1234567890",
    "(123) 456-7890",
    "123-456-7890",
    "123.456.7890"
]

# 定义电话号码的格式化函数
def format_phone_number(phone):
    # 使用正则表达式匹配不同格式的电话号码
    pattern = r"\(?(\d{3})\)?[\s.-]?(\d{3})[\s.-]?(\d{4})"
    match = re.match(pattern, phone)
    if match:
        # 如果匹配成功,则重新格式化电话号码
        formatted_number = "-".join(match.groups())
        return formatted_number
    else:
        # 如果匹配失败,则返回原始电话号码
        return phone

# 对每个电话号码进行格式化
for phone in phone_numbers:
    formatted_number = format_phone_number(phone)
    print(formatted_number)

# 123-456-7890
# 123-456-7890
# 123-456-7890
# 123-456-7890

 使用正则表达式进行文本清洗,去除非字母字符:

import re

# 定义需要清洗的文本
text = "This is an example text! It contains some $special$ characters & symbols 123."

# 定义清洗文本的函数
def clean_text(text):
    # 使用正则表达式去除非字母字符
    cleaned_text = re.sub(r'[^a-zA-Z\s]', '', text)
    return cleaned_text

# 对文本进行清洗
cleaned_text = clean_text(text)
print("Cleaned Text:", cleaned_text)

 使用正则表达式从文本中提取出所有的邮箱地址:

import re

# 定义包含邮箱地址的文本
text = "Contact us at support@example.com or feedback@test.com for any inquiries."

# 定义提取邮箱地址的函数
def extract_email_addresses(text):
    # 使用正则表达式提取邮箱地址
    pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
    emails = re.findall(pattern, text)
    return emails

# 从文本中提取邮箱地址
extracted_emails = extract_email_addresses(text)
print("Extracted Emails:", extracted_emails)

 使用正则表达式从文本中提取网址链接:

import re

# 定义包含网址链接的文本
text = "Check out our website at https://www.example.com for more information. You can also visit us at http://example.org."

# 定义提取网址链接的函数
def extract_urls(text):
    # 使用正则表达式提取网址链接
    pattern = r'https?://\S+'
    urls = re.findall(pattern, text)
    return urls

# 从文本中提取网址链接
extracted_urls = extract_urls(text)
print("Extracted URLs:", extracted_urls)

 使用正则表达式删除文本中的空行:

import re

# 定义包含空行的文本
text = """This is some text.

This is another paragraph.


This is a third paragraph.

"""

# 定义删除空行的函数
def remove_blank_lines(text):
    # 使用正则表达式替换连续的多个空行为一个空行
    cleaned_text = re.sub(r'\n\s*\n', '\n', text)
    return cleaned_text

# 删除文本中的空行
cleaned_text = remove_blank_lines(text)
print("Cleaned Text:")
print(cleaned_text)

正则表达式(Regular Expression)是一种用于描述字符串模式的工具,可以帮助您在文本中进行搜索、匹配和替换操作。正则表达式由普通字符(例如字母、数字)和元字符(例如.*^)组成,通过组合这些字符来定义匹配规则。

在 Python 中,使用 re 模块可以对正则表达式进行操作。以下是一些常用的正则表达式元字符和符号:

  • .:匹配任意单个字符,除了换行符。
  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • *:匹配前面的表达式零次或多次。
  • +:匹配前面的表达式一次或多次。
  • ?:匹配前面的表达式零次或一次。
  • \d:匹配一个数字。
  • \w:匹配一个字母、数字或下划线。
  • \s:匹配一个空白字符(空格、制表符等)。

示例:

  • a.*b:匹配以 a 开头,以 b 结尾,中间可以有任意字符的字符串。
  • \d{3}-\d{4}:匹配电话号码格式,例如 123-4567
  • [A-Za-z]+:匹配一个或多个字母。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值