亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

使用Python正則表達(dá)式操作文本數(shù)據(jù)的方法

系統(tǒng) 1799 0

什么是正則表達(dá)式

正則表達(dá)式,是簡(jiǎn)單地字符的序列,可指定特定的搜索模式。正則表達(dá)式已存在很長(zhǎng)一段時(shí)間,并且它本身就是計(jì)算機(jī)科學(xué)的一個(gè)領(lǐng)域。

在 Python中,使用Python的內(nèi)置re模塊處理正則表達(dá)式操作 。在本節(jié)中,我將介紹創(chuàng)建正則表達(dá)式并使用它們的基礎(chǔ)知識(shí)。您可以使用以下步驟實(shí)現(xiàn)正則表達(dá)式:

  1. 指定模式字符串。
  2. 將模式字符串編譯為正則表達(dá)式對(duì)象。
  3. 使用正則表達(dá)式對(duì)象在字符串中搜索模式。
  4. 可選:從字符串中提取匹配的模式。

編寫和使用正則表達(dá)式

在Python中創(chuàng)建正則表達(dá)式的第一步是導(dǎo)入re 模塊:

            
import re
          

Python正則表達(dá)式使用模式字符串表示,模式字符串是指定所需搜索模式的字符串。在最簡(jiǎn)單的形式中,模式字符串只能由字母,數(shù)字和空格組成。以下模式字符串表示精確字符序列的搜索查詢。您可以將每個(gè)角色視為一個(gè)單獨(dú)的模式。在后面的例子中,我將討論更復(fù)雜的模式:

            
import re

pattern_string = "this is the pattern"

          

下一步是將模式字符串處理為Python可以使用的對(duì)象,以便搜索模式。這是使用re模塊的compile()方法完成的。的編譯()方法將圖案字符串作為參數(shù)并返回一個(gè)正則表達(dá)式對(duì)象:

            
import re

pattern_string = "this is the pattern" regex = re.compile(pattern_string)

          

獲得正則表達(dá)式對(duì)象后,可以使用它在搜索字符串中搜索模式字符串中指定的模式。搜索字符串只是您要在其中查找模式的字符串的名稱。要搜索模式,可以使用regex對(duì)象的search()方法,如下所示:

            
import re

pattern_string = "this is the pattern" regex = re.compile(pattern_string)

match = regex.search("this is the pattern")

          

如果模式字符串中指定的模式位于搜索字符串中,則search()方法將返回匹配對(duì)象。否則,它返回None數(shù)據(jù)類型,這是一個(gè)空值。

由于Python相當(dāng)松散地解釋了True和False值,因此搜索函數(shù)的結(jié)果可以像if語(yǔ)句中的布爾值一樣使用,這可能相當(dāng)方便:

            
....

match = regex.search("this is the pattern") if match:

print("this was a match!")


          

這個(gè)模式應(yīng)該產(chǎn)生一個(gè)匹配,因?yàn)樗c模式字符串中指定的模式完全匹配。如果在搜索字符串的任意位置找到模式,搜索函數(shù)將生成匹配,如下所示:

            
....

match = regex.search("this is the pattern") if match:

print("this was a match!")

if regex.search("*** this is the pattern ***"): print("this was not a match!")

if not regex.search("this is not the pattern"): print("this was not a match!")


          

特殊字符

正則表達(dá)式取決于使用某些特殊字符來表達(dá)模式。因此,除非用于預(yù)期目的,否則不應(yīng)直接使用以下字符:

            
. ^ $ * + ? {} () [] |
          

如果確實(shí)需要使用模式字符串中的任何前面提到的字符來搜索該字符,則可以編寫以反斜杠字符開頭的字符。這稱為轉(zhuǎn)義字符。這是一個(gè)例子:

            
pattern string = "c*b"

## matches "c*b"


          

如果需要搜索反斜杠字符本身,則使用兩個(gè)反斜杠字符,如下所示:

            
pattern string = "cb"

## matches "cb"


          

匹配空格

在模式字符串中的任何位置使用s都匹配空白字符。這比空格字符更通用,因?yàn)樗m用于制表符和換行符:

            
....

a_space_b = re.compile("asb") if a_space_b.search("a b"):

print("'a b' is a match!")

if a_space_b.search("1234 a b 1234"): print("'1234 a b 1234' is a match")

if a_space_b.search("ab"):

print("'1234 a b 1234' is a match")


          

匹配字符串的開頭

如果在模式字符串的開頭使用^字符,則只有在搜索字符串的開頭找到模式時(shí),正則表達(dá)式才會(huì)產(chǎn)生匹配:

            
....

a_at_start = re.compile("^a") if a_at_start.search("a"):

print("'a' is a match")

if a_at_start.search("a 1234"): print("'a 1234' is a match")

if a_at_start.search("1234 a"): print("'1234 a' is a match")


          

匹配字符串的結(jié)尾

類似地,如果在模式字符串的末尾使用$符號(hào),則正則表達(dá)式將僅在模式出現(xiàn)在搜索字符串的末尾時(shí)生成匹配:

            
....

a_at_end = re.compile("a$") if a_at_end.search("a"):

print("'a' is a match") if a_at_end.search("a 1234"):

print("'a 1234' is a match") if a_at_end.search("1234 a"):

print("'1234 a' is a match")


          

匹配一系列字符

可以匹配一系列字符而不是一個(gè)字符。這可以為模式增加一些靈活性:

            
[A-Z] matches all capital letters

[a-z] matches all lowercase letters

[0-9] matches all digits

....

lower_case_letter = re.compile("[a-z]") if lower_case_letter.search("a"):

print("'a' is a match")

if lower_case_letter.search("B"): print("'B' is a match")

if lower_case_letter.search("123 A B 2"): print("'123 A B 2' is a match")

digit = re.compile("[0-9]") if digit.search("1"):

print("'a' is a match") if digit.search("342"):

print("'a' is a match") if digit.search("asdf abcd"):

print("'a' is a match")


          

匹配幾種模式中的任何一種

如果存在構(gòu)成匹配的固定數(shù)量的模式,則可以使用以下語(yǔ)法組合它們:

            
(||)
          

以下a_or_b正則表達(dá)式將匹配任何字符或ab字符的字符串:

            
....

a_or_b = re.compile("(a|b)") if a_or_b.search("a"):

print("'a' is a match") if a_or_b.search("b"):

print("'b' is a match") if a_or_b.search("c"):

print("'c' is a match")


          

匹配序列而不是僅匹配一個(gè)字符

如果+字符位于另一個(gè)字符或模式之后,則正則表達(dá)式將匹配該模式的任意長(zhǎng)序列。這非常有用,因?yàn)樗梢院苋菀椎乇磉_(dá)可以是任意長(zhǎng)度的單詞或數(shù)字。

將模式放在一起

通過一個(gè)接一個(gè)地組合圖案串可以產(chǎn)生更復(fù)雜的圖案。在下面的示例中,我創(chuàng)建了一個(gè)正則表達(dá)式,用于搜索嚴(yán)格后跟單詞的數(shù)字。生成正則表達(dá)式的模式字符串由以下內(nèi)容組成:

與數(shù)字序列匹配的模式字符串:[0-9]+與空白字符匹配的模式字符串:s與字母序列匹配的模式字符串:[az] +

與字符串結(jié)尾或空格字符匹配的模式字符串:(s | $)

            
....

number_then_word = re.compile("[0-9]+s[a-z]+(s|$)")


          

正則表達(dá)式split()函數(shù)

Python中的Regex 對(duì)象也有一個(gè)split()方法。split方法將搜索字符串拆分為子字符串?dāng)?shù)組。所述分裂發(fā)生在沿著其中該圖案被識(shí)別的字符串中的每個(gè)位置。結(jié)果是在模式的實(shí)例之間出現(xiàn)的字符串?dāng)?shù)組。如果模式出現(xiàn)在搜索字符串的開頭或結(jié)尾,則分別在結(jié)果數(shù)組的開頭或結(jié)尾包含一個(gè)空字符串:

            
....

print(a_or_b.split("123a456b789")) print(a_or_b.split("a1b"))


          

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 九九热精品在线 | 天天色综合2 | 久久久国产99久久国产一 | 亚洲精品69 | 农村三级孕妇视频在线 | 亚洲精品久久九九热 | 香蕉tv亚洲专区在线观看 | 国产精品久久久久久久成人午夜 | 99久久精彩视频 | 国产第五页 | 精品久久久中文字幕二区 | 91国内精品久久久久免费影院 | 又粗又大的机巴好爽欧美 | 精品美女| 亚洲va精品中文字幕动漫 | a级毛片高清免费视频 | 狠狠色综合色综合网络 | 日本老太做爰xx | 福利视频一区二区 | 国产精品一二区 | 四虎影视www | 久久只有精品视频 | 午夜情趣视频 | 久久久网久久久久合久久久久 | 人人看操 | 日韩黄色精品 | 天天爽夜夜爽精品视频一 | 欧美毛片又粗又长又大 | 国产亚洲漂亮白嫩美女在线 | 亚洲欧美综合一区 | 国产成人在线视频免费观看 | 亚洲不卡视频在线 | 青青青爽线在线视频观看 | 天天操天天干天天舔 | 国产一区二区在线不卡 | 乱子伦免费视频中文字幕 | 国产精品亚洲欧美一区麻豆 | 97影院理论| 色综合网站国产麻豆 | 日本h片a毛片在线播放 | 国产一区二区三区在线观看精品 |