正則表達式對于字符串的處理非常高效
- 簡單的使用如下:
-
用
import re導入正則表達式模塊- python所有正則表達式的函數(shù)都在
re模塊中
- python所有正則表達式的函數(shù)都在
用
re.compile()創(chuàng)建一個Regex對象-
用
Regex對象的search()方法查找傳入的字符串:- 如果字符串中沒有找到該正則表達式的匹配,那么
search()將返回None - 如果找到了,將返回一個
Match對象
- 如果字符串中沒有找到該正則表達式的匹配,那么
調(diào)用
Match對象的group()方法返回匹配的字符串
舉個電話號碼查詢的例子
#導入re模塊
import re
#創(chuàng)建匹配電話號碼的正則表達式對象 `phoneNumRegex `
phoneNumRegex = re.compile(r'\d\d\d-\d\d\d\d\d\d\d')
mo = phoneNumRegex .search('My number is 010-12345678')
if mo is not None:
print('Number is:' + mo.group())
else:
print('Not found!')
- 匹配模式:
| 符號 | 意義 |
|---|---|
| \d | 表示一個數(shù)字字符,即任何一個0到9的數(shù)字 |
| \D | 除0到9的數(shù)字以外的任何數(shù)字 |
| \w | 任何字母、數(shù)字或下劃線字符(‘單詞word’) |
| \W | 除字母、數(shù)字或下劃線以外的任何字符 |
| \s | 空格、制表符或換行符(‘空白space’) |
| \S | 除空格、制表符或換行符以外的任何字符 |
| . | 句點(通配符),匹配除了換行符以外的所有字符 |
- 更多匹配方法:
用括號分組 ()
用管道匹配多個分組 |
用問號實現(xiàn)可以選匹配 ?
匹配這個問號之前的分組0次或者1次
用加號實現(xiàn)多次匹配 +
匹配這個問號之前的分組1次或者多次
用星號實現(xiàn)任意次匹配 *
匹配這個問號之前的分組0次或者多次
用花括號實現(xiàn)指定次數(shù)匹配 {}
匹配這個問號之前的分組特定次數(shù)
花括號默認為貪心匹配,即匹配最長的字符串
非貪心匹配需要在花括號后添加問號,{}?
{n}匹配n次前面的分組。
{n,}匹配n次或更多前面的分組。
{,m}匹配零次到m次前面的分組。
{n,m}匹配至少n次、至多m次前面的分組。
{n,m}?或*?或+?對前面的分組進行非貪心匹配。
Carrots(caret) cost dollars.
插入字符 ^ 匹配開始
^spam表示字符串必須以spam開始
美元字符 表示字符串必須以spam結(jié)束
[abc]匹配方括號內(nèi)的任意字符(諸如a、b或c)。
[^abc]匹配不在方括號內(nèi)的任意字符。
用Regex對象的findall() 方法