. \w \s \d a|b () [...] {} * +
1. 常用元字符
. 匹配除換行符以外的任意字符
\w 匹配字母或數字或下劃線
\s 匹配任意的空白符
\d 匹配數字
\n 匹配一個換行符
\t 匹配一個制表符
^ 匹配字符串的開始
$ 匹配字符串的結尾
\W 匹配非字母或數字或下劃線
\D 匹配非數字
\S 匹配非空白符
a|b 匹配字符a或字符b
() 匹配括號內的表達式,也表示一個組
[...] 匹配字符組中的字符
[^...] 匹配除了字符組中字符的所有字符
2. 量詞:控制前面的元字符出現的次數
* 重復零次或更多次
+ 重復一次或更多次
? 重復零次或一次
{n} 重復n次
{n,} 重復n次或更多次
3. 貪婪匹配和惰性匹配
.* 貪婪匹配
.*? 非貪婪匹配
'''
點: 匹配所有不包括換行
+: 表示重復一次或者更多次,就是說如果條件一直符合的話,就連續匹配
import re
def test_dot():
data1 = 'hello \n world'
pattern = re.compile(r'.+')
res_list = pattern.findall(data1)
assert ['hello ', ' world'] == res_list, 're dot error'
2.點: 匹配所有包括換行
import re
def test_dot2():
# 有時候需要 . 能匹配所有字符,包括換行符, 就需要帶上參數 re.S
data1 = ''
# (.+) 括號說明: 正常會取整個,加括號之后,就只取括號里面的了
ptn = re.compile(r'', re.S)
res_list = ptn.findall(data1)
assert ['hello \n world'] == res_list, 're dot 2 error'
3. \w: 匹配數字、字母 和 下劃線
import re
def test_w():
data1 = 'ab_@.121'
# + 表示重復一次或者更多次,就是說如果條件一直符合的話,就連續輸出,比如:ab_
ptn = re.compile(r'\w+')
res_list = ptn.findall(data1)
assert ['ab_', '121'] == res_list, 're w error'
4.\s: 匹配任意的空白字符
import re
def test_s():
data1 = 'a b\tc\n d$#'
ptn = re.compile(r'\s+')
res_list = ptn.findall(data1)
assert [' ', '\t', '\n '] == res_list, 're s error'
5.\d: 匹配數字
import re
def test_d():
data1 = 'yidong 10086,liantong 10010'
ptn = re.compile(r'\d+')
res_list = ptn.findall(data1)
assert ['10086', '10010'] == res_list, 're d error'
6.^: 有兩個地方用到: 1.本例中的匹配字符串的開始, 2. 在中括號中,取非
import re
def test_start():
data1 = 'ab1ab2'
ptn = re.compile(r'ab\d')
res_list = ptn.findall(data1)
assert ['ab1', 'ab2'] == res_list, 're ^ error'
# ^ 表示只匹配字符串的開始
data1 = 'ab1ab2'
ptn = re.compile(r'^ab\d')
res_list = ptn.findall(data1)
assert ['ab1'] == res_list, 're ^ 2 error'
7.$: 匹配字符串的結束
import re
def test_end():
data1 = '1ab2ab'
ptn = re.compile(r'\dab$')
res_list = ptn.findall(data1)
assert ['2ab'] == res_list, 're $ error'
8. |: a|b 匹配字符串a或字符串b
import re
def test_and():
data1 = '12a_3$dc'
ptn = re.compile(r'\d+|a|d|c')
res_list = ptn.findall(data1)
assert ['12', 'a', '3', 'd', 'c'] == res_list, 're | error'
9. (): 表示一個組
import re
def test_bracket():
data1 = ''
ptn = re.compile(r'')
res_list = ptn.findall(data1)
assert ('1', 'xiaoxinmiao') == res_list[0], 're () error'
10. (): 可以通過?P定義組名
import re
def test_bracket2():
# 可以設置分組名
data1 = ''
ptn = re.compile(r'')
iter_obj = ptn.finditer(data1)
res_obj = iter_obj.__next__()
assert '1' == res_obj.group(
'id') and 'xiaoxinmiao' == res_obj.group('name'), 're () error'
11.(): 當有多組時的例子, 當然這種情況,直接用例子9更方便
import re
def test_bracket3():
# 可以設置分組名
data1 = ''
ptn = re.compile(
r'')
iter_obj = ptn.finditer(data1)
ids, names = [], []
for i in iter_obj:
ids.append(i.group('id'))
names.append(i.group('name'))
assert ['1', '2'] == ids and ['miao1', 'miao2'] == names, 're () error'
12.[]: 匹配字符串中的字符, 其中 - 表示區間,例如:1-9表示1,2,3,4,5,6,7,8,9
import re
def test_bracket_mid():
data1 = '12dss#$$fwe564_'
ptn = re.compile(r'[1-9a-z_$]+')
res_list = ptn.findall(data1)
assert ['12dss', '$$fwe564_'] == res_list, 're [] error'
13.[^]: 匹配除了字符串中的值
import re
def test_bracket_mid2():
data1 = '12dss#$$fwe564_'
# [^] 表示不匹配里面的任何數
ptn = re.compile(r'[^1-9a-z_$]+')
res_list = ptn.findall(data1)
assert ['#'] == res_list, 're [] error'
14. +, * , ? 的理解,但是并不常用, 最常用的還是這個組合 .*?
def test_liangci():
data1 = 'abccd'
# +: 前一個字符出現1次或者多次
re_list = re.findall(r'abc+', data1)
assert ['abcc'] == re_list, 're + error'
# *: 前一個字符出現0次或者多次
re_list = re.findall(r'abf*', data1)
assert ['ab'] == re_list, 're + error'
# ?: 前一個字符出現0次或者1次
re_list = re.findall(r'abc?', data1)
assert ['abc'] == re_list, 're + error'
16. .*?: 非貪婪模式, 直接看例子
import re
def test_star2():
# .* 貪婪
data1 = '我愛北京天安門,天安門上太陽升.'
res_list = re.findall(r'我愛(.*)天安門', data1)
assert ['北京天安門,'] == res_list, 're .* error'
# .*? 非貪婪
res_list = re.findall(r'我愛(.*?)天安門', data1)
assert ['北京'] == res_list, 're .* error'
17. {}: {n}重復多次,{n,}重復多次或者更多次
import re
def test_bracket_big():
# 只有兩位數字才符合要求
data1 = 'a1b12c134d1234e'
res_list = re.findall(r'\d{2}', data1)
assert ['12', '13', '12', '34'] == res_list, r're {} error'
# 兩位,以及兩位以上的數字都符合要求
data1 = 'a1b12c134d1234e'
res_list = re.findall(r'\d{2,}', data1)
assert ['12', '134', '1234'] == res_list, r're {} error'
18. []: 實戰,匹配中文
import re
def test_zh():
data1 ='我愛111北京%天安
審核編輯:劉清
-
字符串
+關注
關注
1文章
577瀏覽量
20486 -
python
+關注
關注
56文章
4782瀏覽量
84467 -
ASSERT
+關注
關注
0文章
17瀏覽量
7228 -
Split
+關注
關注
0文章
6瀏覽量
5562
發布評論請先 登錄
相關推薦
評論