记录正则表达式的常用方法和踩坑点
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
案例:
清理文本中的多余空格,把多个连续的空格替换成一个单独的空格
-
先编写出匹配多个空格的正则表达式,
-
然后通过这个替换函数,将一个空格去替换这多个空格。
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.