1'''
2author : 極簡xksa
3date : 2018.7.27
4goal : 正規表示式
5'''
6 7import re
8 9line = 'jijianxksa123'
1011# ^a 表示匹配以a開頭的字串(只匹配一次)
12# . 表示該字元可為任意字元(只匹配一次)
13# * 表示前面的字元可以出現任意次(0次或多次)(多次匹配)
14reg_str01 = '^j.*' # 表示以j開頭的字串
15# re.match 函式
16# 第乙個引數是匹配的格式
17# 第二引數是要匹配的字串
18# 返回值為:匹配成功,返回match物件,否則返回:none
1920if re.match(reg_str01,line) :
21 print("匹配成功!") # reg_str = '^j.*' 匹配成功
22else:
23 print("匹配失敗!") # reg_str = '^i.*' 匹配失敗
2425
26# 23$ 表示匹配以23結尾的字串(只匹配一次)
27reg_str02 = '^j.*23$'
28if re.match(reg_str02,line) :
29 print("匹配成功!") # reg_str = '^j.*23$' 匹配成功
30else:
31 print("匹配失敗!") # reg_str = '^j.*13$' 匹配失敗
3233
34line01 = 'boooboaobxby'
35# () 內的為 匹配模式,通過 group函式 可以取出匹配結果
36# 正規表示式貪婪匹配模式:從後面(右邊)開始匹配
37reg_str03 = '.*(b.*b).*'
38test01 = re.match(reg_str03,line01)
39if test01:
40 print(test01.group(1)) # result : bxb
41else:
42 print("匹配失敗!")
4344# 正規表示式非貪婪匹配模式:從前面(左邊)開始匹配
45# ? : 表示從左邊開始匹配,匹配到第乙個符合模式的內容,即進入模式
46#47reg_str03 = '.*?(b.*b).*' # 半貪婪匹配
48reg_str04 = '.*?(b.*?b).*' # 非貪婪匹配
49test01 = re.match(reg_str03,line01)
50test02 = re.match(reg_str04,line01)
51if test01 and test02:
52 print(test01.group(1)) # result : boooboaobxb
53 print(test02.group(1)) # result : booob
54else:
55 print("匹配失敗!")
day02:
1'''
2author : 極簡xksa
3date : 2018.7.28
4goal : 正規表示式
5'''
6import re
7line01 = 'boooboaobcxby'
8 9def regtest(reg_str,line = line01):
10 test = re.match(reg_str, line)
11 if test:
12 print(test.group(1))
13 else:
14 print("匹配失敗!")
1516# + :表示前面的字元,至少出現一次
17reg_str04 = '.*(b.+b).*' # (b.+b)表示b與b之間至少有乙個字元
18regtest(reg_str04) # result : bcxb
1920# : 控制前面字元出現次數
21# a : 表示a出現兩次
22# b : 表示b至少出現3次,最多出4次
23# c : 表示c至少出現4次
24reg_str05 = '.*(b.b).*' # (b.b)表示匹配到的b與b之間,只有兩字元
25reg_str06 = '.*(b.b).*' # (b.b)表示匹配到的b與b之間,至少有3個字元,至多有4個字元
26reg_str07 = '.*(b.b).*' # (b.b)表示匹配到的b與b之間,至少有4個字元
27regtest(reg_str05) # result : bcxb
28regtest(reg_str06) # result : boaob
29regtest(reg_str07) # result : boaobcxb
3031# | :表示 或
32# (abc|123) : 表示匹配到 abc 或者 123,都算匹配成功
33reg_str08 = '.*(boo|abc)'
34reg_str09 = '.*(abc|boo)'
35regtest(reg_str08) # result : boo
36regtest(reg_str09) # result : boo
3738# : 表示 裡面包含的內容都可以進行匹配,包含內容只有表面字元含義
39# [abcd] : 表示 只要這個字元為 a/b/c/d中的乙個都可以匹配成功
40# [0-9] : 表示 只要這個字元在 0-9 這個區間內,都可以匹配成功
41# [^x] : 表示匹配 字元不為 x
42line02 = '**號:15573563467'
43reg_str10 = '.*(1[3458][0-9]).*'
44reg_str11 = '.*(1[3458][^1]).*'
45regtest(reg_str10,line02) # result : 15573563467
46regtest(reg_str11,line02) # result : 15573563467
4748# \s 表示匹配空格,匹配一次
49# \s 表示匹配不是空格的字元,匹配一次
50# \w 表示匹配 a-z、0-9、_ 中的容易字元,匹配一次
51# \w 與 \w 相反
52# \d 表示數字
53# [\u4e00-\u9fa5] : 表示所有漢字,unicode 編碼
5455def regtest_test(reg_str,line = line01):
56 test = re.match(reg_str, line)
57 if test:
58 print(test.group(1)+':'+test.group(2)+'-'+test.group(3)+'-'+test.group(4))
59 else:
60 print("匹配失敗!")
6162# 簡單例項
63str01 = '張三出生於2023年12月20日'
64str02 = '李四出生於1989-01-20'
65str03 = '王五出生於1997/2/5'
66str04 = '趙六出生於1997.12.20'
67str = [str01,str02,str03,str04]
68# 提取出姓名+出生日期
69# 匹配模式
70reg_str12 = '(.*)出生於(\d)[.年/-](\d)[.月/-](\d).*?'
71for i in range(4):
72 regtest_test(reg_str12,str[i])
73# result :
74# 張三:1997-12-20
75# 李四:1989-01-20
76# 王五:1997-2-5
77# 趙六:1997-12-20
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...