python正則表達式--特殊字符


正則表達式—特殊表達式含義

正則表達式的字母和數字表示他們自身,但多數字母和數字前加一個反斜杠時會擁有不同的含義。 

下面列出了正則表達式模式語法中的特殊元素。

 

1.普通字符集

1)    \w              匹配字母數字及下划線

2)    \W              匹配非字母數字及下划線

3)    \s               匹配任意空白字符,等價於 [\t\n\r\f].

4)    \S               匹配任意非空白字符

5)    \d               匹配任意數字,等價於 [0-9]

6)    \D              匹配任意非數字

7)    \1...\9            匹配第n個分組的內容。

8)    [a-zA-Z0-9]    匹配任何字母及數字

 

2.數量字符集

用在字符或分組符(...)之后,默認貪婪匹配,如果想抑制貪婪匹配,需在數量字符后加?,例如:\w+?

1) .    匹配任意字符,除了換行符,當re.DOTALL標記被指定時,可以匹配包括換行符的任意字符

2)  *        匹配前一個字符0次1次或多次

3)  +        匹配前一個字符1次或多次

4)  ?        匹配前一個字符0次或1次

5)  {m}     匹配前一個字符m次

6)  {m,n}   匹配前一個字符m到n次

7)  {m,}     匹配前一個字符至少m次

8)  {,n}      匹配前一個字符0到n次,最多n次

 

3.邊界匹配符

1)  ^       匹配字符串開頭,如果是多行則匹配每一行的開頭

2)  [^]       在[...]中,^表示否定,如非字母[^a-zA-Z],非數字[^0-9]

3)  $       匹配字符串或一行的結尾,如果是多行匹配模式,則每一行的結尾

4)  \A       僅匹配字符串的開始,同^

5)  \b        匹配一個單詞的邊界,也就是指單詞和空格間的位置

6)  \B       等價於[^\b]表示匹配非單詞邊界

7)  \Z       匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串。

8)  \z        匹配字符串結束

 

4.邏輯匹配符

1)  |(或)

    匹配 | 左右任意一種正則表達式,如果左邊表達式匹配上,匹配結束,不再匹配右邊的正則表達式,該符號一般放在()中使用,如果沒在圓括號中則它的范圍是整個正則表達式

2)  分組 (...)

    后向引用,用()括起來的正則表達式將被作為一個分組,從正則表達式的左邊依次算起,有多少個左括號'(',就有 多少個分組,分組的編碼從1依次加1,無論是括號中嵌套括號,並且分組表達式作為一個整體,后可接數量詞。

3)  \<number>

    引用分組匹配到的分組編號為<number>的字符串 如:\1...\9

4)  (?P<name>...)

    命名分組,除了默認的分組編號外再指定一個別名分組

    注意:P是大寫

5)  (?P=name)

    引用別名為name的分組匹配,這個是在正則表達式中引用,表示匹配重復的字符串,也可以使用編號引用。

    注意:P是大寫

 

5.特殊匹配符

1)  (?imx)     正則表達式包含三種可選標志:i, m, 或 x 。只影響括號中的區域。

2)  (?-imx)      正則表達式關閉 i, m, 或 x 可選標志。只影響括號中的區域。

3)  (?:...)        匹配到的括號內字符串不作為分組

4)  (?!pattern)       前向否定斷言語法,表示否定開頭

          只能用在正則表達式的開頭,pattern是匹配模式,它后面的內容需要不匹配 該正則表達式才匹配成功

5)  (?<!pattern)   后向否定斷言語法,表示否定結尾

           前面的內容需要不匹配該pattern模式才匹配成功

6)  (?=pattern)   前向肯定斷言語法.

          需要匹配pattren模式才能匹配成功,表示肯定前面的字符內容

7)  (?<=pattern)    后向肯定斷言語法

         需要匹配pattern模式才能匹配成功,表示肯定后面的字符內容

8)     (?#...)           #后面的內容將被作為注釋而忽略

 1 # coding=utf-8
 2 import re
 3 # 1. 寫一個正則表達式,使其能同時識別下面所有的字符串:'bat','bit', 'but', 'hat', 'hit', 'hut'
 4 
 5 s ="bat ,bit ,but ,hat ,hit ,hut"
 6 print re.findall(r'[bh][aiu]t',s)
 7 
 8 # 2.匹配由單個空格分隔的任意單詞對,也就是姓和名
 9 
10 s = "Han meimei, Li lei, Zhan san, Li si"
11 print re.findall(r'([A-Za-z]+) ([A-Za-z]+)',s)
12 
13 # 3. 匹配由單個逗號和單個空白符分隔的任何單詞和單個字母,如姓氏的首字母
14 
15 s = "yu, Guan  bei, Liu  fei, Zhang"
16 print re.findall(r'([a-zA-Z]+),\s([a-zA-Z])',s)
17 
18 # 4.匹配所有的有效的Python標識符集合
19 
20 s = "_hello , python_1 , 2world , Pra_ni , @dfa_ , ewq* "
21 print re.findall(r'\b[a-zA-z_][\w]*(?!=\W) ',s)
22 
23 # 5. 根據美國街道地址格式,匹配街道地址。美國接到地址使用如下格式:1180 Bordeaux Drive。使你的正則表達式足夠靈活,以支持多單詞的街道名稱,如3120 De la Cruz Boulevard
24 
25 s = """street 1: 1180  Bordeaux Drive,"
26     street 1: 3120 De la Cruz Boulevard"""
27 print re.search(r'\d+( +[a-zA-Z]+)+',s).group()
28 
29 # 6. 匹配以“www”起始且以“.com”結尾的簡單Web域名:例如,http://www.yahoo.com ,也支持其他域名,如.edu .net等
30 
31 s = "http://www.yahoo.com        www.foothill.edu"
32 print re.search(r'w{3}\.[a-zA-Z]+\.(com|edu|net)',s).group()
33 
34 # 7. 匹配所有能夠表示Python整數的字符串集
35 
36 s = '520a1    20L 0  156   -8 -10a  A58'
37 ite = re.finditer(r'-?\d+',s)
38 for i in ite: print i.group(),
39 
40 # 8. 匹配所有能夠表示Python長整數的字符串集
41 
42 s = '520a    20L 0  156   -8L  A58'
43 ite = re.finditer(r'-?\d+L',s)
44 for i in ite: print i.group(),
45 
46 # 9. 匹配所有能夠表示Python浮點數的字符串集
47 
48 s = '80.2  fds2.1  0.003'
49 print re.findall(r'\d+\.\d+',s)
50 
51 # 10. 表示所有能夠表示Python復數的字符串集
52 
53 s = '12j  fds -4j  5-2j fdsa'
54 print re.findall(r'\d*-?\d+j',s)
55 
56 # 11、匹配一行文字中的所有開頭的字母內容
57 
58 s="Now, let's take a closer look at some iconic moments from the show's stage made by Chinese Angels."
59 print re.findall(r'\b\w',s)
60 
61 # 12、匹配一行文字中的所有開頭的數字內容
62 
63 s="Now, let's take a closer look at some iconic moments from the show's stage made by Chinese Angels."
64 print re.findall(r'\b\d',s)
65 
66 # 13、匹配一行文字中的所有開頭的數字內容或字母內容
67 
68 s = "577fsda3f you12daf f1s32dafffff"
69 print re.findall(r'\b\d+|\b[A-Za-z]+',s)
70 
71 # 14、 只匹配包含字母和數字的行
72 
73 s = "nihao fsadf \n789! 3asfd 1\nfds12df e4 4564"
74 print re.findall(r'^([a-zA-Z\d ]+)$',s,re.M)
75 
76 # 15、提取每行中完整的年月日和時間字段
77 
78 s="""time 1988-01-01 17:20:10 fsadf 2018-02-02 02:29:01"""
79 print re.findall(r'[12]\d{3}\-[01]\d\-[0123]\d\s*[012]\d\:[012345]\d\:[012345]\d',s)
80 
81 # 16、將每行中的電子郵件地址替換為你自己的電子郵件地址
82 
83 s="""xss@qq.com, 465465@163.com, ppp@sina.com
84     s121f@139.com, soifsdfj@134.com
85     pfsadir423@123.com"""
86 print re.sub(r'\w+?\@\w+?\.com','zeke@qq.com',s)
87 
88 # 17、匹配\home關鍵字:
89 
90 s ="fdsar \home   \homeer"
91 print re.findall(r'\\home',s)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM