python正則表達式(^ $ ( ) )(四)


起始位置 和單行,多行模式
^表示匹配文本的起始位置。
正則表達式可以設定單行模式和多行模式
如果是單行模式,表示匹配整個文本的開頭位置
如果是多行模式,表示匹配文本每行的開頭位置

比如,下面的文本中,每行最前面的數字表示水果的編號,最后的數字表示價格

001-蘋果價格-60,
002-橙子價格-70,
003-香蕉價格-80,

 如果我們要提取所有的水果編號,用這樣的正則表達式 ^\d+

用python代碼展示單行模式:

content='''001-蘋果價格-60,
002-橙子價格-70,
003-香蕉價格-80,'''
import re
p=re.compile(r'^\d+')
for one in p.findall(content):
    print(one)

'''
輸出結果:001

'''
默認為單行模式,所以只輸入001

 用python代碼展示多行模式:

content='''001-蘋果價格-60,
002-橙子價格-70,
003-香蕉價格-80,'''
import re
p=re.compile(r'^\d+',re.M)
for one in p.findall(content):
    print(one)

'''
輸出結果:
001
002
003
'''
注意:compile的第二個參數re.M,指明了使用多行模式,若不加re.M,表示單行模式,^只會匹配整個文本的開頭位置

  $表示匹配文本的結束位置

如果是單行模式,表示匹配整個文本的結束位置

如果是多行模式,表示匹配文本每行的結束位置

比如,下面的文本中,每行最前面的數字表示水果的編號,最后的數字表示價格

001-蘋果價格-60
002-橙子價格-70
003-香蕉價格-80

  如果我們要提取所有的水果價格,用這樣的正則表達式 ^\d+$

 

用python代碼展示單行模式:

content='''001-蘋果價格-60
002-橙子價格-70
003-香蕉價格-80'''
import re
p=re.compile(r'\d+$')
for one in p.findall(content):
    print(one)

'''
輸出結果:
80
'''

  用python代碼展示多行模式:

content='''001-蘋果價格-60
002-橙子價格-70
003-香蕉價格-80'''
import re
p=re.compile(r'\d+$',re.M)
for one in p.findall(content):
    print(one)


'''
輸出結果:
60
70
80
'''

 括號-組選擇

括號稱之為 正則表達式的組選擇,是從正則表達式匹配的內容里面扣取出其中的某些部分

前面,我們有個例子,從下面的文本中,選中每行逗號前面的字符串,也包括逗號本身

蘋果,蘋果是綠色的
橙子,橙子是橙色的
香蕉,香蕉是黃色的

  就可以這樣寫正則表達式 ^.*,

但是,如果我們要求不要包括逗號呢?

當然不能直接這樣寫 ^.*

因為最后的逗號是特征所在,如果去掉它,就沒法找逗號前面的了。

但是把逗號放在正則表達式中,又會包含逗號

解決問題的方法就是使用組選擇符:括號

我們這樣寫 ^(.*),  ,結果如下

 

我們把要從整個表達式中提取的部分放在括號中,這樣水果的名字就被單獨的放在 組group中了

對應的python代碼如下:

content='''蘋果,蘋果是綠色的
橙子,橙子是橙色的
香蕉,香蕉是黃色的
'''
import re
p=re.compile(r'^(.*),',re.MULTILINE)
for one in p.findall(content):
    print(one)


'''
輸出結果:
蘋果
橙子
香蕉
'''

  

python代碼實現:

content='''蘋果,蘋果是綠色的
橙子,橙子是橙色的
香蕉,香蕉是黃色的
'''
import re
p=re.compile(r'^(.*)(,)',re.MULTILINE)
for one in p.findall(content):
    print(one)

'''
輸出結果:
('蘋果', ',')
('橙子', ',')
('香蕉', ',')

'''

 

python代碼實現:

content='''張三,手機號碼15945678901
李四,手機號碼13945677701
王二,手機號碼13845666901
'''
import re
p=re.compile(r'^(.+),.+(\d{11})',re.MULTILINE)
for one in p.findall(content):
    print(one)


'''
輸出結果:
('張三', '15945678901')
('李四', '13945677701')
('王二', '13845666901')

'''

  


免責聲明!

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



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