真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python3正則表達式-創(chuàng)新互聯(lián)

Python3 正則表達式

  • 正則表達式是一個特殊的字符序列,它能幫助我們方便的檢查一個字符串是否與某種模式匹配。
  • 模式字符串使用特殊的語法來表示一個正則表達式
  • 下面列出了正則表達式模式語法中的特殊元素
模 式 含義
^匹配字符串的開頭
$匹配字符串的末尾。
.匹配任意字符,除了換行符,當(dāng)re.DOTALL標(biāo)記被指定時,則可以匹配包括換行符的任意字符。
[...]用來表示一組字符,單獨列出:[amk] 匹配 'a','m'或'k'
[^...]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re*匹配0個或多個的表達式。
re+匹配1個或多個的表達式。
re?匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式
re{ n}精確匹配 n 個前面表達式。例如, o{2} 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的兩個 o。
re{ n,}匹配 n 個前面表達式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。"o{1,}" 等價于 "o+"。"o{0,}" 則等價于 "o*"。
re{ n, m}匹配 n 到 m 次由前面的正則表達式定義的片段,貪婪方式
a|b匹配a或b\n
(re)匹配括號內(nèi)的表達式,也表示一個組
(?imx)正則表達式包含三種可選標(biāo)志:i, m, 或 x 。只影響括號中的區(qū)域。
(?-imx)正則表達式關(guān)閉 i, m, 或 x 可選標(biāo)志。只影響括號中的區(qū)域。
(?: re)類似 (...), 但是不表示一個組
(?imx: re)在括號中使用i, m, 或 x 可選標(biāo)志
(?-imx: re)在括號中不使用i, m, 或 x 可選標(biāo)志
(?#...)注釋.
(?= re)前向肯定界定符。如果所含正則表達式,以 ... 表示,在當(dāng)前位置成功匹配時成功,否則失敗。但一旦所含表達式已經(jīng)嘗試,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊。
(?! re)前向否定界定符。與肯定界定符相反;當(dāng)所含表達式不能在字符串當(dāng)前位置匹配時成功
(?> re)匹配的獨立模式,省去回溯。
\w匹配字母數(shù)字及下
\W匹配非字母數(shù)字及下劃線
\s匹配任意空白字符,等價于 [\t\n\r\f].
\S匹配任意非空字符
\d匹配任意數(shù)字,等價于 [0-9].
\D匹配任意非數(shù)字
\A匹配字符串開始
\Z匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串。
\z匹配字符串結(jié)束
\G匹配最后匹配完成的位置。
\b匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\n, \t, 等.匹配一個換行符。匹配一個制表符。等
\1...\9匹配第n個分組的內(nèi)容。
\10匹配第n個分組的內(nèi)容,如果它經(jīng)匹配。否則指的是八進制字符碼的表達式。

match()和search()的區(qū)別

  • match() 方法只從開始找,開始第一個字符不匹配就找不到了,返回none
  • search()查找整個字符串,找到第一個為止
    示例代碼1:
#!/usr/bin/python3

import re

# 使用 match對象  
match = re.match('yhyang','aayhyang正在學(xué)習(xí)正則表達式')
print(match)     # 最開始匹配不到返回none
輸出:
None

match = re.search('yhyang','aayhyang正在學(xué)習(xí)正則表達式')
print(match.group())  # 直到找到匹配的字符串
輸出:
yhyang

示例代碼2:

創(chuàng)新互聯(lián)長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為太和企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)太和網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
#!/usr/bin/python3

import re

import re
s = """
1234-1234-113
133-1234-2123
125-4567-3456
yhyang@foxmail.com
lilei@qq.com
hmm.lee@google.com
http://baidu.com
https://github.com
http://taobao.com
"""
target = '\d{4}'                 # \d 匹配數(shù)字 {4} 表示4個  代表找到4個數(shù)字
target = '\d{4}-\d{4}-\d{3}'
target = '\d{3}-\d{4}-\d{4}'
target = '\d+-\d+-\d+'         #  \d匹配數(shù)字,+ 表示1個或多個,search 找到第一個就停下來了
target = '[\d+-?]+'           # ? 表示后面跟0個或多個   [] 表示一個字符集如:[a-z]查找小寫字母
target = '\w{5}@\w{2}.com'    #  \w 匹配字符
match = re.search(target,s)
if match:
    print('找到,',target,s)
    print(match.group())
else:
    print('啥都沒找到')

輸出:
找到, \w{5}@\w{2}.com 
1234-1234-113
133-1234-2123
125-4567-3456
yhyang@foxmail.com
lilei@qq.com
hmm.lee@google.com
http://baidu.com
https://github.com
http://taobao.com

lilei@qq.com

分組

  • () 括號分組
  • | 管道符號匹配多個分組
  • ?選擇出現(xiàn)0次或1次
  • re.x 換行,注釋
  • findall
    • 有分組,返回元組列表
    • 無分組,返回字符串列表
  • split
    • 返回用正則分割后的列表

compile 函數(shù)

compile 函數(shù)用于編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數(shù)使用。
語法格式為:
re.compile(pattern[, flags])

參數(shù):

pattern : 一個字符串形式的正則表達式
flags 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數(shù)為:
    re.I 忽略大小寫
    re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當(dāng)前環(huán)境
    re.M 多行模式
    re.S 即為' . '并且包括換行符在內(nèi)的任意字符(' . '不包括換行符)
    re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數(shù)據(jù)庫
    re.X 為了增加可讀性,忽略空格和' # '后面的注釋

示例代碼1:

#!/usr/bin/python3

import re

regex = re.compile(r'yhyang')  # r 表示raw 原始的
regex.findall('asdfasdfasfyhyang,235346747,yhyang')

輸出:
['yhyang', 'yhyang']

示例代碼2:

#!/usr/bin/python3

import re

regex = re.compile(r'(yhyang)')         # ()  分割,分組
regex.split('asdfasdfasfyhyang,235346747,yhyang')

輸出:
['asdfasdfasf', 'yhyang', ',235346747,', 'yhyang', '']

匹配IP地址

#!/usr/bin/python3
import re

parten = ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
# 2[0-4]\d  匹配 24x  x為0-9
# 25[0-5]  匹配 25x  x為0-5
# [01]?\d\d?  [01]? 匹配0個或是一個0或1,\d? 表示0個或1個數(shù)字
# \.  轉(zhuǎn)義 . 
# {3} 前面的規(guī)則匹配3次

# 注意命名 re開頭
re_ip = re.compile(r'((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)')
match = re_ip.match('1.2.3.4')
print(match)
print(match.group())

輸出:
<_sre.SRE_Match object; span=(0, 7), match='1.2.3.4'>
1.2.3.4
示例代碼2:

#!/usr/bin/python3

import re

re_ip = re.compile(r'''
    ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.)  # IP表示一組數(shù)字包括后邊的點
    {3}                                # 表示3組數(shù)字
    (2[0-4]\d|25[0-5]|[01]?\d\d?)      # 最后一組數(shù)字
    ''',re.X)                          # 正則可以換行,注釋
match = re_ip.match('192.168.3.4')
print(match)
print(match.group())

輸出:
<_sre.SRE_Match object; span=(0, 11), match='192.168.3.4'>
192.168.3.4

匹配要不要貪心一點

模式 含義 示例
{m,n}?對于前一個字符重復(fù)m到n次,并取盡可能少的情況在字符串‘a(chǎn)aaaaa’中,a{2,4}會匹配4個a,但a{2,4}?只會匹配2個a
.*與?的搭配默認(rèn)貪心,有多少要多少,?給加上限制,表示非貪心匹配,?把*匹配的字符限制到最少r'"(.)"'與 r'"(.?)"'
  • *?重復(fù)任意次,但盡可能少重復(fù)
  • +?重復(fù)1次或多次,但盡可能少重復(fù)
  • ??重復(fù)0次或1次,但盡可能少重復(fù)
  • {n,}?重復(fù)n次以上,但盡可能少重復(fù)
    示例代碼1:
#!/usr/bin/python3

import re

# 只匹配雙引號中的內(nèi)容,包括雙引號
re_quote = re.compile(r'"(.*)"')
text1 = 'Computer says "no"'
find1 = re_quote.findall(text1)
print(find1)
text2 = 'Computer says "no" Phone says "yes"'
find2 = re_quote.findall(text2)
print(find2)

輸出:
['no']
['no" Phone says "yes']

示例代碼2:

#!/usr/bin/python3

import re

re_quote = re.compile(r'"(.*?)"')
text1 = 'Computer says "no"'
find1 = re_quote.findall(text1)
print(find1)
text2 = 'Computer says "no" Phone says "yes"'
find2 = re_quote.findall(text2)
print(find2)

輸出:
['no']
['no', 'yes']

正則替換

示例代碼:

#!/usr/bin/python3

import re

s = 'sadfasfasdfasdfyhyangdsafasf2352'
ss = s.replace('yhyang','******')   # 替換
print(ss)

regex = re.compile(r'yhyang') # 生成規(guī)則對象
regex.sub('******',s)   # 替換

輸出:
sadfasfasdfasdf**dsafasf2352
'sadfasfasdfasdf**dsafasf2352'

下邊例子分組標(biāo)號\1,\2,\3 類似于awk的列分組 $1 ……

示例代碼1:

#!/usr/bin/python3

import re

# 通過分組替換字符串格式,mm/dd/yy  -> yy-mm-dd
s = '替換日期格式:10/01/2018,12/25/2018'
re_date = re.compile(r'(\d+)/(\d+)/(\d+)')  # 此處給(\d+)/(\d+)/(\d+)按/分為三組,標(biāo)號為\1,\2,\3
re_date.sub(r'\3-\1-\2',s)   # 將上邊的\1,\2,\3位置按要求重新排列

輸出:
'替換日期格式:2018-10-01,2018-12-25'
示例代碼2:

#!/usr/bin/python3

import re

# 替換字符串中間的多余空格
s = '      yhyang    正則   python  好難學(xué), 堅持一下吧, 沒 幾  個了'
s.strip()  # 只去掉最前邊的
re_blank = re.compile(r'\s+') # \s 代表空格
re_blank.sub('',s)

輸出:
'yhyang正則python好難學(xué),堅持一下吧,沒幾個了'

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


分享題目:Python3正則表達式-創(chuàng)新互聯(lián)
路徑分享:http://weahome.cn/article/cecddd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部