正则表达式-踩坑点

记录正则表达式的常用方法和踩坑点

1.  re.escape(timestamp)

re.escape 函数在 Python 的 re(正则表达式)模块中用于对字符串中的所有可能被解释为“特殊字符”的字符进行转义。在正则表达式中,某些字符具有特殊的含义(如 *, ?, ., (, ) 等),如果你希望这些字符被当做普通字符处理而不是特殊字符,就需要使用 re.escape 函数对它们进行转义。

如需要匹配一个时间点:14:57:30.675,

time_pattern = r'\d{2}:\d{2}:\d{2}\:\d{3}'
match_value = re.escape(time_pattern)

2. re.findall(ime_pattern, contiuning_last_identifier)

用于在字符串中查找所有匹配某个模式的子串。它返回一个包含所有非重叠匹配项的列表,如果模式中包含捕获组,那么每个匹配项将是一个字符串的元组。

示例代码:

import re

text = "The quick brown fox jumps over the lazy dog. The fox was quick and brown."

# 定义要搜索的模式
pattern = r"quick"

# 查找字符串中所有匹配模式的结果
matches = re.findall(pattern, text)

# 输出结果
print(matches)
输出结果为:['quick', 'quick']

3, re.finditer(pattern, string)

用于在字符串中找到所有符合指定正则表达式模式的非重叠匹配,并以迭代器的形式返回它们。每个匹配都会被返回为一个 Match 对象,允许你访问匹配的详细信息,比如匹配的起始和结束位置、

案例:匹配文本中的完整单词

pattern = r'\b\w+\b'

\b 表示单词边界

\w匹配任何单词字符,包括字母、数字和下划线(在大多数正则表达式实现中,这等效于[a-zA-Z0-9_]`)。

+ 表示匹配前面的模式一次或多次,因此 \w+ 匹配一个或多个连续的单词字符。

import re

pattern = r'\b\w+\b'  # 一个简单的模式,匹配每个单词
text = "This is an example text."

matches = re.finditer(pattern, text)

for match in matches:
    # match.group(),获取匹配结果
    # match.start()  返回开始的索引
    # match.end()  返回匹配项的结束索引,但这一索引是匹配项结束后的下一个字符的位置,
    # 因此是开区间的结束位置。
    print(f'Match: {match.group()} at {match.start()}-{match.end()}')
    # 输出的是Match: This at 0-4 ;虽然This是0开始,3结束,但是end()会返回下一个索引,也就是4。

4.  re.search(pattern, string, flags=0)

  • pattern:要搜索的正则表达式模式。

  • string:要在其中搜索模式的字符串。

  • flags:(可选)用于修改匹配行为的标志。

用于支持正则表达式操作。这个函数可以扫描整个字符串,寻找第一个符合指定正则表达式模式的位置,并返回一个匹配对象。如果没有找到匹配项,则返回 None

案例:匹配电话号码

import re

text = "My phone number is 123-456-7890"
# \d 表示匹配数字
pattern = r"\d{3}-\d{3}-\d{4}"

match = re.search(pattern, text)

if match:
    print("找到电话号码:", match.group())  # 输出: 找到电话号码: 123-456-7890

 使用标志flag去忽略大小写

import re

text = "Hello World"
pattern = r"world"

match = re.search(pattern, text, re.IGNORECASE)

if match:
    print("找到匹配项(忽略大小写):", match.group())  # 输出: 找到匹配项(忽略大小写): World

5.  pattern = re.compile(r'\d+')

用于将正则表达式模式编译成一个正则表达式对象。这个对象可以用来执行匹配操作,比如查找或分割字符串。如果需要多次使用同一模式进行匹配操作,预先编译该模式会提高效率。

import re

# 编译正则表达式模式
pattern = re.compile(r'\d+')

# 多次使用编译后的模式
match1 = pattern.search('There are 42 apples')
match2 = pattern.search('There are 35 oranges')

if match1:
    print("找到匹配项:", match1.group())  # 输出:42
if match2:
    print("找到匹配项:", match2.group())  # 输出:35

这个正则表达式被作为一个编译对象,在re.compile 被编译了一次,之后可以复用这个编译对象,提高效率,尤其是在需要多次使用这个编译对象的时候。

6.  sub替换函数用法

允许你使用指定的替换字符串来替代正则表达式的匹配部分

# 编译正则表达式模式,匹配一个或多个空白字符
pattern = re.compile(r'\s+')
# 定义一个替换函数,将多个空格替换为单个空格
replace_multiple_spaces = pattern.sub

案例:

清理文本中的多余空格,把多个连续的空格替换成一个单独的空格

  1. 先编写出匹配多个空格的正则表达式,

  2. 然后通过这个替换函数,将一个空格去替换这多个空格。

import re

# 编译正则表达式模式,匹配一个或多个空白字符
pattern = re.compile(r'\s+')

# 定义一个替换函数,将多个空格替换为单个空格
replace_multiple_spaces = pattern.sub

text = "This     is  a    sample    text with   irregular   spacing."

# 调用这个替换函数
cleaned_text = replace_multiple_spaces(' ', text)

print("原始文本:", text)
print("清理后的文本:", cleaned_text)
# 清理后的文本: This is a sample text with irregular spacing.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值