正規表示式

2021-08-30 02:39:22 字數 4189 閱讀 3189

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正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...