成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

五個案例快速熟悉 Python 正則表達(dá)式應(yīng)用

開發(fā)
Python 的 re 庫提供了全面的正則表達(dá)式支持,讓你能夠在 Python 程序中輕松地處理各種文本任務(wù)。本文將通過五個案例,帶大家逐步了解 re 庫的常用功能和技巧。

正則表達(dá)式 (Regular Expression, 簡稱 regex 或 regexp) 是一種強(qiáng)大的文本處理工具,它使用預(yù)定義的特殊字符和模式來匹配、查找、替換和分割字符串。Python 的 re 庫提供了全面的正則表達(dá)式支持,讓你能夠在 Python 程序中輕松地處理各種文本任務(wù)。

本文將通過五個案例,帶大家逐步了解 re 庫的常用功能和技巧。

案例 1: 基礎(chǔ)匹配 - 查找郵箱地址

假設(shè)你有一段文本信息,其中包含一些郵箱地址,你想從中提取出所有的郵箱地址。

正則表達(dá)式: \w+@\w+\.\w+

  • \w: 匹配字母、數(shù)字、下劃線 (word characters)。
  • +: 匹配前面的字符一次或多次。
  • @:  匹配 @ 符號本身。
  • \.: 匹配 . 符號本身 (需要轉(zhuǎn)義,因為 . 在正則中是特殊字符,匹配任意字符)。
import re

text = "聯(lián)系我們:support@example.com 或者 sales.department@another-example.net.cn"
pattern = r'\w+@\w+\.\w+' # r'' 表示原始字符串,避免反斜杠轉(zhuǎn)義問題
emails = re.findall(pattern, text) # findall 查找所有匹配項,返回列表

print("原始文本:", text)
print("提取到的郵箱地址:", emails)

  • r'\w+@\w+\.\w+' 定義了正則表達(dá)式模式。r 前綴表示原始字符串,這在正則表達(dá)式中非常推薦使用,可以避免反斜杠被 Python 字符串轉(zhuǎn)義誤解。
  • re.findall(pattern, text) 函數(shù)會在 text 字符串中查找所有符合 pattern 模式的子字符串,并將它們以列表的形式返回。

上面的正則表達(dá)式是一個非常基礎(chǔ)的郵箱地址匹配模式,它能匹配簡單的郵箱格式,但對于更復(fù)雜的郵箱地址 (例如包含 . 或 - 在用戶名部分) 可能無法完全匹配。在實(shí)際應(yīng)用中,你可能需要更完善的正則表達(dá)式來處理各種郵箱格式。 例如,\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 可以匹配更復(fù)雜的郵箱地址。

案例 2: 匹配手機(jī)號碼

場景:你需要驗證用戶輸入的字符串是否為中國大陸的手機(jī)號碼。

正則表達(dá)式 (簡化版):^1[3-9]\d{9}$

  • ^:  匹配字符串的開始位置。
  • 1:  匹配數(shù)字 1,中國大陸手機(jī)號碼通常以 1 開頭。
  • [3-9]: 匹配數(shù)字 3 到 9 中的任意一個,表示手機(jī)號碼的第二位數(shù)字 (常見的號段第二位)。
  • \d{9}: 匹配 9 個數(shù)字 (\d 代表數(shù)字,{9} 表示重復(fù) 9 次)。
  • $:  匹配字符串的結(jié)束位置。
import re

phone_numbers = ["13812345678", "15098765432", "18655551111", "12345678901", "010-88888888"]

pattern = r'^1[3-9]\d{9}$'

for number in phone_numbers:
    if re.match(pattern, number): # match 從字符串的開頭開始匹配
        print(f"{number} 是一個有效的手機(jī)號碼")
    else:
        print(f"{number} 不是有效的手機(jī)號碼")

  • ^1[3-9]\d{9}$ 定義了手機(jī)號碼的模式。^ 和 $ 確保模式從字符串的開頭匹配到結(jié)尾,避免匹配到字符串中間部分符合模式的情況。
  • re.match(pattern, number) 函數(shù)嘗試從 number 字符串的開頭匹配 pattern。如果匹配成功,返回一個匹配對象;否則返回 None。

這個正則表達(dá)式只是一個簡化的版本,實(shí)際的手機(jī)號碼規(guī)則非常復(fù)雜,號段不斷更新。更嚴(yán)格的手機(jī)號碼驗證可能需要更復(fù)雜的正則表達(dá)式,或者使用專門的手機(jī)號碼驗證庫。

案例 3: 分組與提取 - 解析日期格式

你有一系列不同格式的日期字符串,例如 "2023-10-26"、"2023/10/26"、"2023年10月26日",你想統(tǒng)一提取出年、月、日。

正則表達(dá)式 (支持多種分隔符): (\d{4})[-/年](\d{1,2})[-/月](\d{1,2})日?

  • (\d{4}):  用括號 () 分組,匹配 4 位數(shù)字表示年份。
  • [-/年]: 匹配 -、/ 或 年 字作為分隔符。
  • (\d{1,2}):  分組,匹配 1 到 2 位數(shù)字表示月份。
  • [-/月]: 匹配 -、/ 或 月 字作為分隔符。
  • (\d{1,2}):  分組,匹配 1 到 2 位數(shù)字表示日期。
  • 日?: 匹配 "日" 字,? 表示 0 次或 1 次,即 "日" 字可選。
import re

dates = ["2023-10-26", "2023/10/26", "2023年10月26日", "2024-1-5", "invalid date"]

pattern = r'(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})日?'

for date_str in dates:
    match = re.search(pattern, date_str) # search 在字符串中搜索第一個匹配項
    if match:
        year = match.group(1) # 獲取第一個分組的內(nèi)容 (年份)
        month = match.group(2) # 獲取第二個分組的內(nèi)容 (月份)
        day = match.group(3)   # 獲取第三個分組的內(nèi)容 (日期)
        print(f"日期字符串: {date_str},  提取結(jié)果: 年={year}, 月={month}, 日={day}")
    else:
        print(f"日期字符串: {date_str},  無法解析")

  • (\d{4})[-/年](\d{1,2})[-/月](\d{1,2})日? 使用括號 () 創(chuàng)建了三個分組,分別對應(yīng)年、月、日。
  • re.search(pattern, date_str) 在 date_str 中搜索第一個匹配項。
  • match.group(n) 方法可以獲取第 n 個分組匹配到的內(nèi)容 (從 1 開始計數(shù))。

案例 4: 替換操作 - 統(tǒng)一文本格式

你需要將文本中的所有 "Mr.", "Ms.", "Miss." 等稱謂統(tǒng)一替換為 "先生/女士"。

正則表達(dá)式 (匹配多種稱謂): (Mr\.|Ms\.|Miss\.)

  • (Mr\.|Ms\.|Miss\.):  使用 | (或) 匹配 "Mr.", "Ms.", 或 "Miss."。 注意 . 需要轉(zhuǎn)義 \.。  整個部分用括號分組。
import re

text = "Hello Mr. Smith, how are you? And Ms. Jane, are you doing well?  Also, Miss. Lee is joining us."

pattern = r'(Mr\.|Ms\.|Miss\.)'
replacement = '先生/女士'
new_text = re.sub(pattern, replacement, text) # sub 執(zhí)行替換操作

print("原始文本:", text)
print("替換后的文本:", new_text)

  • r'(Mr\.|Ms\.|Miss\.)' 定義了要匹配的稱謂模式。
  • re.sub(pattern, replacement, text) 函數(shù)會在 text 中查找所有匹配 pattern 的子字符串,并用 replacement 字符串替換它們。

案例 5: 分割字符串 - 按多種分隔符分割

你需要將一段文本按照句號、逗號、問號、感嘆號等多種標(biāo)點(diǎn)符號分割成句子。

正則表達(dá)式 (匹配多種標(biāo)點(diǎn)符號): [.,?!]

  • [.,?!]:  字符集 [] 匹配方括號中列出的任意一個字符,這里匹配句號 .、逗號 ,、問號 ?、感嘆號 !。
import re

text = "This is the first sentence. And this is the second, with a comma! Is this the third? Yes it is."

pattern = r'[.,?!]'
sentences = re.split(pattern, text) # split 根據(jù)模式分割字符串,返回列表

print("原始文本:", text)
print("分割后的句子列表:", sentences)

  • r'[.,?!]' 定義了分隔符模式,匹配任何句號、逗號、問號或感嘆號。
  • re.split(pattern, text) 函數(shù)會根據(jù) pattern 將 text 字符串分割成多個子字符串,并將它們以列表形式返回。 分割符本身不會包含在返回的子字符串中。

總結(jié)

這5個案例展示了 re 庫在 Python 中處理正則表達(dá)式的一些基本和常用功能:

  • re.findall():  查找所有匹配項。
  • re.match():  從字符串開頭匹配。
  • re.search():  在字符串中搜索第一個匹配項。
  • re.sub():  替換匹配項。
  • re.split():  根據(jù)模式分割字符串。

同時,我們也接觸了一些常用的正則表達(dá)式語法元素:

  • 字符類: \w, \d, \s, . 等
  • 量詞: +, *, ?, {n}, {n,m}
  • 錨點(diǎn): ^, $
  • 分組: ()
  • 字符集: []
  • 或: |

要深入掌握正則表達(dá)式,還需要不斷學(xué)習(xí)和實(shí)踐。 你可以查閱 Python re 庫的官方文檔,以及在線正則表達(dá)式教程和工具,例如 https://regex101.com/ (一個非常棒的在線正則表達(dá)式測試工具)。

責(zé)任編輯:趙寧寧 來源: Python數(shù)智工坊
相關(guān)推薦

2025-06-16 10:10:00

Python正則表達(dá)式

2024-09-14 09:18:14

Python正則表達(dá)式

2025-04-24 10:20:00

2020-03-30 11:25:16

Linux 開源操作系統(tǒng)

2017-08-10 13:13:44

Linux正則表達(dá)式

2011-07-11 12:33:30

JAVA

2021-01-27 11:34:19

Python正則表達(dá)式字符串

2024-12-16 07:33:45

C#正則表達(dá)式

2010-03-03 13:09:10

Linux正則表達(dá)式

2010-03-25 18:25:36

Python正則表達(dá)式

2020-09-04 09:16:04

Python正則表達(dá)式虛擬機(jī)

2018-09-27 15:25:08

正則表達(dá)式前端

2010-03-11 08:55:45

python正則表達(dá)式

2019-12-10 10:40:57

Python正則表達(dá)式編程語言

2010-03-01 15:51:59

Python則表達(dá)式

2016-09-12 09:57:08

grep命令表達(dá)式Linux

2010-03-03 13:22:08

Python正則表達(dá)式

2022-03-28 06:19:14

正則表達(dá)式開發(fā)

2009-02-18 09:48:20

正則表達(dá)式Java教程

2019-07-17 15:45:47

正則表達(dá)式字符串前端
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 能看的av网站 | 日韩一二三区 | 美女张开腿露出尿口 | 亚洲国产成人精品久久 | 久久不射电影网 | 巨大荫蒂视频欧美另类大 | 日韩在线免费看 | 黄色一级毛片 | 日韩中文久久 | 日本在线黄色 | 日韩一区二区三区在线观看视频 | 九九九视频精品 | 视频在线一区二区 | 精品欧美乱码久久久久久1区2区 | 国产亚洲一区二区精品 | 国产一区二区三区免费视频 | 日韩超碰 | 日韩欧美一区在线 | 国产精品99久久免费观看 | 黑人巨大精品欧美一区二区免费 | 2021狠狠天天天 | 欧美日韩在线视频一区 | 色综合天天综合网国产成人网 | 99re在线| 国产一区二| 龙珠z在线观看 | 免费国产一区二区 | 中文字幕一区二区三区四区五区 | 我爱操 | 亚洲一区 中文字幕 | 日本一道本视频 | 天天影视色综合 | 91黄在线观看 | 999久久精品| 中文字幕亚洲精品 | 欧美在线一区二区三区 | 免费成人毛片 | 91看片免费版 | 亚洲一区免费视频 | 欧美色图另类 | 免费在线观看91 |