日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++正则表达式_Python正则表达式教程-常用文本处理技巧

發布時間:2023/12/19 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++正则表达式_Python正则表达式教程-常用文本处理技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹:

正則表達式用于識別模式(pattern)是否存在于給定的字符(字符串)序列中。它們有助于處理文本數據,這通常是涉及文本挖掘的數據科學項目的先決條件。您一定遇到過一些正則表達式的應用程序:它們在服務器端用于在注冊過程中驗證電子郵件地址或密碼的格式,用于解析文本數據文件以查找,替換或刪除某些字符串等。

內容:

正則表達式非常強大,在本教程中,您將學習在Python中使用它們。您將涵蓋以下主題:

· Python中的正則表達式

· 基本字符:普通字符

· 通配符:特殊字符

· 重復次數

· 使用正則表達式進行分組

· 貪婪vs非貪婪匹配

· re?Python庫 --- search()?與?match()

Python中的正則表達式

  • 導入re模塊

在Python中,re模塊支持正則表達式。使用以下命令導入此模塊:

>>>Import re
  • 基本模式:普通字符

您可以使用普通字符輕松解決Python中的許多基本模式。普通字符是最簡單的正則表達式。它們完全匹配,并且在正則表達式語法中沒有特殊含義。

示例為" A"," a"," X"," 5"。

普通字符可用于執行簡單的完全匹配:

>>>Import re>>>pattern = r"Cookie">>>sequence = "Cookie">>>if re.match(pattern, sequence):>>> print("Match!")>>>else: >>> print("Not a match!")Match!

match()如果文本與模式匹配,則該函數返回匹配對象。否則返回None。

不過,現在讓我們關注普通字符!您是否注意到r模式的開頭Cookie?

這稱為原始字符串文字。它更改了字符串文字的解釋方式。這樣的文字會按其出現時進行存儲。

例如,當前綴為a時只是一個反斜杠,r而不是被解釋為轉義序列。您將看到帶有特殊字符的含義。有時,語法涉及反斜杠轉義的字符,并且為了防止將這些字符解釋為轉義序列,請使用原始r前綴。在本示例中,您實際上并不需要它,但是使用它來保持一致性是一種很好的做法。

  • 通配符:特殊字符

特殊字符是與正則表達式不匹配但在正則表達式中使用時實際上具有特殊含義的字符。

最廣泛使用的特殊字符是:

· . -匹配除換行符以外的任何單個字符。

re.search(r'Co.k.e', 'Cookie').group()'Cookie'

該group()函數返回與匹配的字符串re。稍后您將更詳細地看到此功能。

· w - 小寫w。匹配任何單個字母,數字或下劃線。

re.search(r'Cowkwe', 'Cookie').group()'Cookie'

· W - 大寫w。匹配不屬于 w的任何字符(小寫w)。

re.search(r'CWke', 'C@ke').group()'C@ke'

· s - 小寫字母s。匹配單個空格字符,例如:空格,換行符,制表符,返回值。

re.search(r'Eatscake', 'Eat cake').group()'Eat cake'

· S - 大寫字母s。匹配不屬于 s(小寫s)的任何字符。

re.search(r'CookSe', 'Cookie').group()'Cookie'

· - 小寫字母t。匹配標簽。

re.search(r'Eatcake', 'Eat cake').group()'Eatcake'

· - 小寫字母n。匹配換行符。

· - 小寫字母r。比賽歸來。

·d - 小寫字母d。匹配十進制數字0-9。

re.search(r'cddkie', 'c00kie').group()'c00kie'

· ^-插入符號 在字符串的開頭匹配一個模式。

re.search(r'^Eat', 'Eat cake').group()'Eat'

· $ -匹配字符串末尾的模式。

re.search(r'cake$', 'Eat cake').group()'cake'

[abc] -匹配a或b或c。

[a-zA-Z0-9]-匹配(a至z)或(A至Z)或(0至9)中的任何字母。可以通過補充集合來匹配不在范圍內的字符。如果集合的第一個字符是^,則所有不在集合中的字符都將被匹配。

re.search(r'Number: [0-6]', 'Number: 5').group()'Number: 5'# Matches any character except 5re.search(r'Number: [^5]', 'Number: 0').group()'Number: 0'

· A-大寫a。僅在字符串開頭匹配。也可以跨多行工作。

re.search(r'A[A-E]ookie', 'Cookie').group()'Cookie'

· b-小寫字母b。僅匹配單詞的開頭或結尾。

re.search(r'b[A-E]ookie', 'Cookie').group()'Cookie'

· -反斜杠。如果反斜杠后面的字符是公認的轉義字符,則采用該術語的特殊含義。例如,被視為換行符。但是,如果后面的字符不是可識別的轉義字符,則將象任何其他字符一樣對待并通過。

讓我們看幾個例子:

# This checks for '' in the string instead of '' due to the '' used re.search(r'Backstail', 'Backstail').group()'Backstail'# This treats 's' as an escape character because it lacks '' at the start of 's're.search(r'Backstail', 'Back tail').group()'Back lash'
  • 重復次數

如果您要查找序列中的長模式,將變得非常乏味。幸運的是,該re模塊使用以下特殊字符處理重復:

· + -檢查其左側的一個或多個字符。

re.search(r'Co+kie', 'Cooookie').group()'Cooookie'

· * -檢查左側是否有零個或多個字符。

# Checks for any occurrence of a or o or both in the given sequencere.search(r'Ca*o*kie', 'Caokie').group()'Caokie'

· ? -檢查其左邊是否為零或一個字符。

# Checks for exactly zero or one occurrence of a or o or both in the given sequencere.search(r'Colou?r', 'Color').group()'Color'

但是,如果您要檢查序列重復的確切數目怎么辦?

例如,檢查應用程序中電話號碼的有效性。re模塊還使用以下正則表達式很好地處理了此問題:

{x} -重復x次。

{x,} -重復至少x次或更多。

{x, y} -重復至少x次,但不超過y次。

re.search(r'd{9,10}', '0987654321').group()'0987654321'

將+和*資格賽被認為是greedy。

  • 使用正則表達式進行分組和分組

假設,當您驗證電子郵件地址并想要分別檢查用戶名和主機時。

這是group正則表達式功能派上用場的時候。它允許您拾取匹配文本的一部分。

由括號()界定的正則表達式模式的部分稱為groups。括號不會更改表達式匹配的內容,而是在匹配的序列內形成組。group()在本教程的示例中,您一直都在使用該功能。match.group()像平常一樣,沒有任何參數的純文本仍然是整個匹配文本。

email_address = 'Please contact us at: support@datacamp.com'match = re.search(r'([w.-]+)@([w.-]+)', ____________)if _____: print(match.group()) # The whole matched text print(match.group(1)) # The username (group 1) print(match.group(2)) # The host (group 2)

貪婪vs非貪婪匹配

當特殊字符與搜索序列(字符串)盡可能匹配時,則稱為"貪婪匹配"。這是正則表達式的正常行為,但有時不希望出現這種行為:

pattern = "cookie"sequence = "Cake and cookie"heading = r'

TITLE

're.match(r'<.>', heading).group()'

TITLE

'

該模式<.>匹配整個字符串,直到第二次出現為止>。

但是,如果只想匹配第一個

標記,則可以使用貪婪的限定符*?,該限定符匹配的文字越少越好。

?在限定符之后添加使其以非貪婪或最小的方式執行匹配;也就是說,將匹配盡可能少的字符。跑步時<.>,您只會與比賽

heading = r'

TITLE

're.match(r'<.>', heading).group()'

'

re Python庫

Re Python中的庫提供了幾個函數,使其值得掌握。您已經看過其中的一些,例如re.search(),re.match()。讓我們詳細檢查一些有用的功能:

search(pattern, string, flags=0)

使用此功能,您可以掃描給定的字符串/序列,以查找正則表達式產生匹配項的第一個位置。如果找到,則返回相應的匹配對象;否則,None如果字符串中沒有位置與模式匹配,則返回。請注意,這None與在字符串中的某個點找到零長度匹配不同。

pattern = "cookie"sequence = "Cake and cookie"re.search(pattern, sequence).group()'cookie'

· match(pattern, string, flags=0)

如果字符串開頭的零個或多個字符與模式匹配,則返回相應的匹配對象。否則None,如果字符串與給定的模式不匹配,則返回。

pattern = "C"sequence1 = "IceCream"# No match since "C" is not at the start of "IceCream"re.match(pattern, sequence1)sequence2 = "Cake"re.match(pattern,sequence2).group()'C'

search() 與 match()

該match()函數僅在字符串的開頭檢查匹配項(默認情況下),而該search()函數在字符串的任何位置檢查匹配項。

· findall(pattern, string, flags=0)

查找整個序列中所有可能的匹配項,并將它們作為字符串列表返回。每個返回的字符串代表一個匹配項。

email_address = "Please contact us at: support@datacamp.com, xyz@datacamp.com"#'addresses' is a list that stores all the possible matchaddresses = re.findall(r'[w.-]+@[w.-]+', email_address)for address in addresses: print(address)support@datacamp.comxyz@datacamp.com

· sub(pattern, repl, string, count=0, flags=0)

這就是substitute功能。它返回通過用替換替換或替換字符串中最左邊的非重疊模式所獲得的字符串repl。如果找不到該模式,則該字符串將原樣返回。

email_address = "Please contact us at: xyz@datacamp.com"new_email_address = re.sub(r'([w.-]+)@([w.-]+)', r'support@datacamp.com', email_address)print(new_email_address)Please contact us at: support@datacamp.com

· compile(pattern, flags=0)

將正則表達式模式編譯為正則表達式對象。當您需要在單個程序中多次使用表達式時,使用該compile()函數保存生成的正則表達式對象以供重用會更有效。這是因為compile()緩存了傳遞給的最新模式的編譯版本以及模塊級匹配功能。

pattern = re.compile(r"cookie")sequence = "Cake and cookie"pattern.search(sequence).group()'cookie'# This is equivalent to:re.search(pattern, sequence).group()'cookie'

提示:可以通過指定flags值來修改表達式的行為。您可以flag在本教程中看到的各種功能中添加一個額外的參數。一些使用的標志是:IGNORECASE,DOTALL,MULTILINE,VERBOSE,等。

案例研究:使用正則表達式

通過學習一些示例,您已經了解了正則表達式在Python中的工作方式,是時候動手了!在本案例研究中,您將運用自己的知識。

import reimport requeststhe_idiot_url = 'https://www.gutenberg.org/files/2638/2638-0.txt'def get_book(url): # Sends a http request to get the text from project Gutenberg raw = requests.get(url).text # Discards the metadata from the beginning of the book start = re.search(r"*** START OF THIS PROJECT GUTENBERG EBOOK .****

總結

以上是生活随笔為你收集整理的c++正则表达式_Python正则表达式教程-常用文本处理技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 毛片网在线观看 | 国产制服91一区二区三区制服 | 亚洲激情视频小说 | 最新国产露脸在线观看 | 免费中文字幕 | www.狠狠操| 美女被c出水 | 美女让男人捅 | 少妇高潮久久久久久潘金莲 | 在线欧美日韩 | 精品乱子伦一区二区三区 | 中文一区二区在线 | 亚洲欧美日韩色 | 一区二区三区国产精品视频 | 亚洲精品视频观看 | 大奶av | 91av一区二区三区 | 无码人妻久久一区二区三区 | 天天综合国产 | 国产操女人 | 亚洲精品视频在线 | 毛片在线网站 | 欧美一区二区三区视频 | 精品偷拍一区 | www日韩欧美 | 成人午夜免费观看 | 潘金莲性xxxxhd | 欧美久草视频 | 国产精品久久久久久久久久久久久久久久久 | 色呦呦视频 | 美色视频 | 男人的天堂日韩 | 中文字幕人成乱码熟女香港 | 男女爽爽爽 | 一区二区三区 欧美 | 97xxx| 大胸美女吻戏 | 欧美日本一道 | 黄色在线播放视频 | 亚洲av无码专区在线电影 | 张津瑜国内精品www在线 | 91污在线观看| av黄色免费在线观看 | 一道本一区二区 | 女人18片毛片60分钟 | 久久成人在线观看 | 波多野结衣一区二区三区高清av | 成人性视频sm.| 久久久无码18禁高潮喷水 | 天天尻| 麻豆传媒网站在线观看 | 日韩高清国产一区在线 | 优优色影院| 久久精品大片 | 亚洲一区二区精品 | 精品久久久无码中文字幕边打电话 | 深爱五月激情五月 | 调教奶奴 | 青青草视频在线看 | 最新永久地址 | 91久久国产综合久久91 | 三级免费网站 | av黄| 在线观看的av网站 | 亚洲欧美激情在线观看 | 国产精品熟女久久久久久 | 久久99久久99精品 | 久久综合第一页 | 美女洗澡无遮挡 | 青娱乐国产视频 | 成人乱码一区二区三区av | 九九爱国产 | 二区三区在线观看 | 日本女人一级片 | 国产原创在线 | 国产又粗又猛又黄 | 两个人看的www视频免费完整版 | 中文无码精品一区二区三区 | 国产成人在线一区二区 | 黄色av免费 | 国产精品热久久 | 久久精品国产亚洲av麻豆蜜芽 | www.欧美在线观看 | 天堂视频一区二区 | 在线黄色免费 | 无码精品久久久久久久 | 亚洲黄色免费网站 | 天天插天天操 | 精品爆乳一区二区三区无码av | 色婷婷在线播放 | 国产一区二区在线播放 | 日本成人精品 | 四虎影院在线免费播放 | 免费爱爱视频网站 | 88av网| 无人码人妻一区二区三区免费 | 久久福利网站 | 国产精品日韩精品 | 免费啪视频 |