一、正则表达式
1.1 语法
1.1.1 限定符
- *:匹配前面的子表达式零次或多次。zo 能匹配 "z" 以及 "zoo"。等价于 {0,}。
- +:匹配前面的子表达式一次或多次。等价于 {1,}。
- ?:匹配前面的子表达式零次或一次。
- {m,n}:最少匹配 m 次且最多匹配 n次。
1.1.2 特殊字符(匹配字符字符:\$)
- $:匹配输入字符串的结尾位置。
- ( ):标记子表达式的开始和结束
- .:匹配除换行符\n之外的任何单字符
- [:标记一个中括号表达式的开始.
- ^:匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。
- {}:限定符
- |:指明两项之间的一个选择,或运算。
1.2.3 普通字符及其等价形式
- [abc]:匹配 [] 中的所有字符,单个。
- [A-Z]:匹配所有大写字母;[a-z] 表示所有小写字母。
- [\s\S]:匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。
- \w:匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
- \d:匹配数字,等价于[0-9]
1.2修饰符及优先级
1.2.1 修饰符
- i:ignore - 不区分大小写,匹配设置为不区分大小写,搜索时不区分大小写,X 和 x 没有区别。
- g:global - 全局匹配,查找所有的匹配项。
- m:multi line - 多行匹配,使边界字符 ^ 和 $ 匹配每一行的开头和结尾,多行,不是整个字符串的开头和结尾。
- s:特殊字符圆点 . 中包含换行符 \n默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。
1.2.2 优先级
从高到低:
\:转义符
(), (?:), (?=), []:圆括号和方括号
*, +, ?, {n,m}:限定符
^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
|:或运算1.2 简单示例
[1-9][0-9]{4,10}$ :qq号 go+gle :匹配 {gogle, google, gooogle, ...} colou?r :匹配 {color, colour} gr(a|e)y :匹配 {gray, grey}
二、Python应用正则表达式
Python中的正则表达式使用模块 re 来处理。
2.1 re.compile 函数
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,让后面的函数来使用pattern对象。
re.compile(pattern, flags) pattern正则表达式:"\d+" flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为: re.I 忽略大小写 re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境 re.M 多行模式 re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符) re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库 re.X 为了增加可读性,忽略空格和 # 后面的注释
举例:
import re pattern = re.compile(r'\d+') # 创建一个匹配数字的正则表达式
2.2 re.match函数
re.match 是 Python 中的一个内置函数,它是正则表达式模块 re 的一部分。这个函数用于检查一个字符串是否与一个正则表达式模式匹配。
re.match 函数的语法如下:re.match(pattern, string, flags=0)
参数说明:
pattern:这是一个字符串,包含你想要匹配的正则表达式。
string:这是你想要检查的字符串。
flags:这是一个可选的参数,用于指定正则表达式的标志。例如,re.IGNORECASE 标志可以使匹配不区分大小写。
如果字符串与正则表达式匹配,re.match 函数会返回一个匹配对象。如果匹配失败,它会返回 None。
下面是一个使用 re.match 函数的简单示例:import re match = re.match('Hello.*', 'Hello world!') # 检查字符串是否以 'Hello' 开头 if match: print('匹配成功') else: print('匹配失败') match = re.match('hello.*', 'Hello world!', re.IGNORECASE) # 使用 re.IGNORECASE 标志,不区分大小写 if match: print('匹配成功') else: print('匹配失败')
2.3 re.search方法
re.search是Python的正则表达式库re的一个方法,用于在字符串中搜索模式。
它的基本语法是:
re.search(pattern, string, flags=0)
这里:
pattern 是你要搜索的正则表达式模式。
string 是你要在其中搜索的字符串。
flags 是一个可选的参数,用于指定正则表达式的标志。例如,re.IGNORECASE 标志可以使搜索不区分大小写。
如果找到了与模式匹配的子串,re.search会返回一个匹配对象,否则返回None。
下面是一个简单的使用示例:
import re
text = "Hello, I am a Python programmer."
match = re.search("Python", text) # 查找 "Python" 这个词
if match:
print("Found!")
else:
print("Not found.")
注意:re.search会扫描整个字符串来寻找匹配的模式,如果字符串非常大或者包含非常特殊的模式,这可能会很慢。如果你需要对大型文本或特殊模式进行高效的搜索,可能需要考虑使用更专门的方法,如 re.finditer 或 re.compile。
findall
用于查找一个模式在字符串中所有出现的位置。它返回一个列表,其中包含所有匹配的子字符串。例如:
import re
text = "The quick brown fox jumps over the lazy dog"
pattern = "fox"
matches = re.findall(pattern, text)
print(matches) # Prints ['fox']
替换和分割字符串
使用 re.sub() 方法可以替换字符串中的模式。
python
import re
text = "Python 是一种非常强大的编程语言。"
new_text = re.sub("Python", "Java", text)
print(new_text)
使用 re.split() 方法可以根据模式分割字符串。
import re
text = "Python,Java,C++"
lang = re.split(",", text)
print(lang)