python 正则表达式详解大全
Python 正则表达式是一种强大的工具,可用于对字符串进行匹配和搜索。在本指南中,我们将介绍 Python 正则表达式的所有内容,包括基本概念、语法、元字符等。
正则表达式用于描述字符集合的模式,常被用于文本处理和数据分析。在 Python 中,可以使用 re 模块进行正则表达式的处理。 re 模块提供了一组用于编写正则表达式和处理和操作它们的函数。
a. 基本模式: 正则表达式模式由普通文本和元字符两部分组成。普通文本是要匹配的字符或字符串,元字符是用于特殊意义的字符序列。
b. 特殊字符: 在正则表达式中,有一些特殊字符,它们有特殊的含义,表示一些特殊的字符或字符集合。例如,元字符 “.” 匹配任何字符,元字符 “^” 匹配字符串的开头,元字符 “$” 匹配字符串的结尾等。
c. 字符集合: 在正则表达式中,可以使用字符集合描述一组字符。例如,“[abc]” 匹配单个字符 “a”、“b” 或 “c”。
d. 重复匹配: 在正则表达式中,可以指定一个模式重复出现的次数。例如,“a{3}” 匹配连续出现 3 次的字符 “a”,“a{3,}” 匹配至少出现 3 次的字符 “a”,“a{3,5}” 匹配 3 至 5 次的字符 “a”。
e. 逻辑运算: 在正则表达式中,可以使用逻辑运算符"|“表示“或”关系,使用括号”()"来分组。
f. 匹配结果: 在 Python 中,可以使用 re 模块的函数对字符串进行匹配。如果匹配成功,会返回一个 Match 对象。Match 对象包含有关匹配结果的信息,例如匹配的起始位置和结束位置、匹配的字符串等。
以下是一些常见的正则表达式示例:
a. 匹配任意字符: . 匹配任意一个字符。
b. 匹配字符集合: [abc] 匹配字符 “a”、“b” 或 “c”。
c. 匹配字符范围: [a-z] 匹配任意一个小写字母。
d. 匹配数字: \d 匹配任意一个数字,相当于 [0-9]。
e. 匹配非数字: \D 匹配任意一个非数字字符,相当于 [^0-9]。
f. 匹配空白字符: \s 匹配任意一个空白字符,包括空格、制表符、换行符等。
g. 匹配非空白字符: \S 匹配任意一个非空白字符。
h. 匹配单词字符: \w 匹配任意一个单词字符,包括字母、数字、下划线等。
i. 匹配非单词字符: \W 匹配任意一个非单词字符。
j. 匹配字符串开头: ^ 匹配字符串的开头。
k. 匹配字符串结尾: $ 匹配字符串的结尾。
l. 匹配重复字符: * 表示匹配前一个字符出现 0 次或多次;+ 表示匹配前一个字符出现 1 次或多次;? 表示匹配前一个字符出现 0 次或 1 次。
m. 匹配固定长度字符: {m} 表示匹配前一个字符出现 m 次;{m,n} 表示匹配前一个字符出现 m 至 n 次。
n. 匹配分组: ( ) 表示匹配一个字符或一组字符,并将其作为一个分组。
-
正则表达式示例代码
re.match
和re.search
区别re.match和re.search都是python的正则表达式匹配函数,但是在匹配的过程中存在一些区别: 1. re.match只会从字符串的开始位置进行匹配,而re.search则会在整个字符串中查找第一个匹配项。 2. 如果在字符串中匹配成功,re.match就返回一个匹配对象,否则返回None。而re.search无论是否匹配都会返回一个匹配对象,如果没有找到匹配项,则返回None。 3. re.search的效率通常比re.match要高一些,因为re.match需要从头开始匹配,并且只在第一个位置匹配成功时才会停止,而re.search可以在字符串的任何地方匹配成功。 4. 在使用re.match和re.search时,都可以加入是否区分大小写的参数,例如re.match("pattern", "string", re.IGNORECASE)可以忽略pattern和string中字母的大小写。
以下是一些使用正则表达式的实例代码:
a. 匹配邮箱地址:
import re
email = 'example@email.com'
pattern = '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}'
# [a-zA-Z0-9._%+-] 匹配 example,@[a-zA-Z0-9.-] 匹配 @email,\.匹配.,[a-zA-Z]{2,4} 匹配 com
result = re.match(pattern, email)
if result:
print('匹配成功')
else:
print('匹配失败')
b. 匹配手机号码:
import re
phone = '13812345678'
pattern = '^1[3456789]\d{9}$'
# ^1:匹配第一个,[3456789]:匹配第二个,$:表示倒数第一个开始,{9}:抓取9位数,\d表示0-9数值也就是[0-9]
result = re.match(pattern, phone)
if result:
print('匹配成功')
else:
print('匹配失败')
c. 按行读取文件并匹配关键字:
import re
pattern = 'error|fail'
with open('log.txt', 'r') as f:
for line in f:
result = re.search(pattern, line)
if result:
print(line)
本指南介绍了 Python 正则表达式的基本概念、语法、元字符等内容。正则表达式是 Python 数据分析和文本处理中常用的工具,熟练掌握正则表达式可以大大提高程序的处理效率和准确性。
这段代码使用正则表达式在
response.text
中查找符合模式'window.__SEARCH_RESULT__ = (.*?)</script>'
的字符串。其中,
'window.__SEARCH_RESULT__ = '
是模式中的字符串部分,表示需要匹配该字符串开始位置处的内容。‘(.*?)’ 是模式中的通配符部分,表示需要匹配任意字符任意次数,且尽可能少匹配,直到遇到下一个字符串部分 ‘’。
‘’ 是模式中的字符串部分,表示需要匹配该字符串结束位置前的内容。找到的匹配结果包含在一个列表中,通过
re.findall()
函数返回。