簡介
正規(guī)表達式(Regular Expression,簡寫為RE),是一個字符串模型,描述了某個句法的規(guī)則,可以用來在文本中進行匹配。
正則不是Python語言的產(chǎn)物,最初出現(xiàn)于形式化語言理論中?,F(xiàn)在很多語言支持了正則表達式,Python于1.5版本引入了re模塊,擁有了全部的正則表達式功能。
re模塊使用
方法
re.search()可用于掃描整個字符串并返回第一個成功的匹配。
語法
re.search(pattern, string, flags=0)
pattern 是用于匹配的正則表達式
string 是要進行掃描的字符串
flags 用于控制正則表達式的匹配方式
flags可選項
| 修飾符 | 描述 | 備注 |
|---|---|---|
| re.I | 使匹配對大小寫不敏感 | |
| re.S | 使.匹配包括換行在內的所有字符 |
.說明見正則常用語法
|
| re.U | 根據(jù)Unicode字符集解析字符 |
語法示例
[Python Console]
>>> import re
>>> str = 'hello world'
>>> pattern = 'hello (.)orld'
>>> match = re.search(pattern, str)
>>> match.group()
'hello world'
>>> match.groups()
('w',)
示例說明
正則表達式語法在下方說明,先說明re模塊相關。
re.search()返回一個re.Match類對象,
可以對該對象使用:
-
group()方法獲取匹配到的完整字符串 -
groups()方法可以獲取匹配到的完整字符串中,匹配規(guī)則中占位符所對應的字符串
正則常用語法
總結了一些在此次工程中用到的正則語法。
| 占位符 | 語法 | 示例 |
|---|---|---|
| () | 對正則表達式分組并保存匹配的文本 | 示例1 |
| . | 用于匹配任意單個字符,換行符除外 | 示例1 |
| * | 將前方字符串匹配規(guī)則修改為匹配0~多個 | 示例2 |
| + | 將前方字符串匹配規(guī)則修改為匹配1~多個 | 與示例2類似 |
| ? | 修飾前方字符串匹配規(guī)則,進行最短匹配 (又稱非貪婪模式。默認匹配模式為最長匹配, 會匹配目標字符串中最長符合規(guī)則的子串) |
示例3 |
| \s | 匹配空白字符(空格,換行符等) | 示例4 |
| [...] | 匹配一組字符,單獨列出:[abc]匹配a,b或c
|
|
| [^...] | 匹配不在[]中的字符:[^abc]匹配除了a,b,c之外的字符 |
示例
示例2
[Python Console]
>>> import re
>>> str = 'hello world world'
>>> pattern = 'hello (.*)orld'
>>> match = re.search(pattern, str)
>>> match.group()
'hello world world'
>>> match.groups()
('world wo',)
說明:正則默認進行了最長匹配(又稱貪婪匹配),即在有多種符合規(guī)則的子串中(hello world和hello world world均符合規(guī)則),返回最長的子串。
示例3
[Python Console]
>>> import re
>>> str = 'hello world world'
>>> pattern = 'hello (.*?)orld'
>>> match = re.search(pattern, str)
>>> match.group()
'hello world'
>>> match.groups()
('wo',)
說明:與示例2最長匹配相對,?將匹配規(guī)則改為最短匹配(又稱非貪婪匹配)
示例4
[Python Console]
>>> import re
>>> str = 'hello world world'
>>> pattern = 'hello(\\s*?)world'
>>> match = re.search(pattern, str)
>>> match.group()
'hello world'
>>> match.groups()
(' ',)
說明:Python字符串中\字符需要轉義,\s匹配空格,*修飾匹配多個,?設置為最短匹配
需要轉義的字符
這里只總結了此次遇到的一些需要轉義的字符(前面加上\)
| * | ( | ) | \ |
|---|