最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python正則表達(dá)式從匹配手機(jī)號(hào)到提取文本內(nèi)容的基礎(chǔ)用法詳解

 更新時(shí)間:2026年05月21日 09:35:00   作者:程序員榴蓮  
本文介紹了Python中re模塊的基本用法,包括使用re模塊導(dǎo)入正則表達(dá)式、使用re.search查找第一個(gè)匹配項(xiàng)、re.match從字符串開頭匹配、re.findall提取所有匹配項(xiàng)、re.sub替換匹配內(nèi)容、re.split按多個(gè)分隔符拆分文本、re.match驗(yàn)證字符串格式等常見方法

在日常開發(fā)中,我們經(jīng)常會(huì)遇到這類需求:

  • 從一段文字里找出手機(jī)號(hào);
  • 從用戶輸入中提取郵箱;
  • 把字符串里的數(shù)字統(tǒng)一替換掉;
  • 按多種分隔符拆分文本;
  • 從簡(jiǎn)單 HTML 片段中提取標(biāo)簽內(nèi)容。

這些場(chǎng)景都非常適合使用正則表達(dá)式。

Python 內(nèi)置的 re 模塊提供了一套完整的正則工具。本文會(huì)從幾個(gè)最常見的方法開始,結(jié)合示例代碼,帶你快速理解 Python 正則表達(dá)式的基本用法。

1. 引入 re 模塊

使用正則表達(dá)式之前,需要先導(dǎo)入 Python 的內(nèi)置模塊 re

import re

re 是 regular expression 的縮寫,也就是正則表達(dá)式。

它可以幫助我們按照某種規(guī)則去匹配、查找、替換或分割字符串。

2. 使用 re.search 查找第一個(gè)匹配項(xiàng)

假設(shè)現(xiàn)在有一段文本:

text = "我的手機(jī)號(hào)是 13812345678,郵箱是 test@example.com"

我們想從里面找出手機(jī)號(hào),可以使用 re.search()

phone = re.search(r"1[3-9]\d{9}", text)

if phone:
    print(f"找到手機(jī)號(hào):{phone.group()}")

輸出結(jié)果:

找到手機(jī)號(hào):13812345678

這里的正則表達(dá)式是:

r"1[3-9]\d{9}"

它的含義是:

  • 1:手機(jī)號(hào)以數(shù)字 1 開頭;
  • [3-9]:第二位是 39 之間的數(shù)字;
  • \d{9}:后面再跟 9 個(gè)數(shù)字。

所以它可以匹配類似 13812345678 這樣的手機(jī)號(hào)。

需要注意的是,re.search() 只會(huì)返回第一個(gè)匹配結(jié)果。如果找到了,返回一個(gè)匹配對(duì)象;如果沒找到,返回 None。

因此實(shí)際使用時(shí),通常要先判斷:

if phone:
    print(phone.group())

其中 group() 用來取出真正匹配到的字符串。

3. 使用 re.search 查找郵箱

我們還可以繼續(xù)從同一段文本中查找郵箱:

email = re.search(r"\w+@\w+\.\w+", text)

if email:
    print(f"找到郵箱:{email.group()}")

輸出結(jié)果:

找到郵箱:test@example.com

這個(gè)正則表達(dá)式:

r"\w+@\w+\.\w+"

可以拆成幾部分理解:

  • \w+:匹配一個(gè)或多個(gè)字母、數(shù)字或下劃線;
  • @:匹配郵箱中的 @ 符號(hào);
  • \w+:匹配域名主體;
  • \.:匹配真正的點(diǎn)號(hào);
  • \w+:匹配后綴。

為什么點(diǎn)號(hào)要寫成 \.?

因?yàn)樵谡齽t表達(dá)式里,. 有特殊含義,表示“任意字符”。如果我們想匹配普通的點(diǎn)號(hào),就需要用反斜杠進(jìn)行轉(zhuǎn)義。

4. 使用 re.findall 查找所有匹配項(xiàng)

re.search() 只會(huì)找第一個(gè)結(jié)果。

如果我們想找出所有匹配內(nèi)容,可以使用 re.findall()。

比如下面這段文本中有多個(gè)價(jià)格:

text = "價(jià)格:100元、200元、350元"
prices = re.findall(r"\d+", text)

print(prices)

輸出結(jié)果:

['100', '200', '350']

這里的正則表達(dá)式是:

r"\d+"

它表示匹配一個(gè)或多個(gè)數(shù)字。

findall() 會(huì)把所有匹配到的結(jié)果放進(jìn)一個(gè)列表中返回。

所以當(dāng)你需要“批量提取”內(nèi)容時(shí),findall() 非常常用。

5. 使用 re.sub 替換字符串

正則不僅能查找,還能替換。

比如我們想把日期中的數(shù)字全部替換成 X

text = "今天是2026年02月19日"
result = re.sub(r"\d+", "X", text)

print(result)

輸出結(jié)果:

今天是X年X月X日

re.sub() 的基本格式是:

re.sub(pattern, replacement, string)

也就是:

  • pattern:要匹配的正則規(guī)則;
  • replacement:替換成什么;
  • string:在哪個(gè)字符串里替換。

在這個(gè)例子中,\d+ 會(huì)匹配連續(xù)數(shù)字,所以 2026、0219 都會(huì)被替換成 X。

6. 使用 re.split 按多個(gè)分隔符拆分字符串

普通字符串的 split() 一次通常只能按一種分隔符拆分。

但實(shí)際數(shù)據(jù)經(jīng)常不那么規(guī)整,比如:

text = "張三;李四,王五 趙六"

這里的名字之間有分號(hào)、逗號(hào)和空格。

這時(shí)可以使用 re.split()

names = re.split(r"[;,\s]+", text)

print(names)

輸出結(jié)果:

['張三', '李四', '王五', '趙六']

這個(gè)正則表達(dá)式:

r"[;,\s]+"

含義是:

  • []:字符集合;
  • ;:匹配分號(hào);
  • ,:匹配逗號(hào);
  • \s:匹配空白字符;
  • +:匹配一次或多次。

也就是說,只要遇到分號(hào)、逗號(hào)或空白字符,就可以作為分隔符。

7. 常用正則符號(hào)速查

下面這些符號(hào)是寫正則表達(dá)式時(shí)最常見的基礎(chǔ)語法。

符號(hào)含義
.匹配任意字符,換行符除外
\d匹配數(shù)字,相當(dāng)于 [0-9]
\D匹配非數(shù)字
\w匹配字母、數(shù)字、下劃線
\W匹配非字母、數(shù)字、下劃線
\s匹配空白字符
\S匹配非空白字符
^匹配字符串開頭
$匹配字符串結(jié)尾
*匹配 0 次或多次
+匹配 1 次或多次
?匹配 0 次或 1 次
{n}匹配恰好 n 次
{n,m}匹配 n 到 m 次
[]字符集合
``
()分組

剛開始學(xué)習(xí)正則時(shí),不需要一次性記住所有復(fù)雜語法。

先掌握 \d\w、\s、+、*、[]^、$ 這些基礎(chǔ)符號(hào),就已經(jīng)可以解決很多實(shí)際問題。

8. 實(shí)戰(zhàn)一:驗(yàn)證手機(jī)號(hào)

前面我們用 search() 從文本中找手機(jī)號(hào)。

如果現(xiàn)在要判斷一個(gè)字符串是不是完整的手機(jī)號(hào),可以使用 re.match()

phone_pattern = r"^1[3-9]\d{9}$"

print(re.match(phone_pattern, "13812345678"))

這里的規(guī)則比前面更嚴(yán)格:

r"^1[3-9]\d{9}$"

其中:

  • ^ 表示字符串開頭;
  • $ 表示字符串結(jié)尾;
  • 1[3-9]\d{9} 表示手機(jī)號(hào)規(guī)則。

加上 ^$ 之后,意味著整個(gè)字符串必須完整符合手機(jī)號(hào)格式。

如果不加它們,只要字符串中包含一段符合規(guī)則的內(nèi)容,也可能被匹配到。

9. 實(shí)戰(zhàn)二:驗(yàn)證郵箱

郵箱驗(yàn)證可以寫成這樣:

email_pattern = r"^[\w.+-]+@[\w-]+\.[\w.]+$"

print(re.match(email_pattern, "test@example.com"))

這個(gè)表達(dá)式支持更常見的郵箱格式:

  • 用戶名部分允許字母、數(shù)字、下劃線、點(diǎn)號(hào)、加號(hào)和短橫線;
  • 中間必須有 @;
  • 域名部分允許字母、數(shù)字、下劃線和短橫線;
  • 后綴部分允許字母、數(shù)字、下劃線和點(diǎn)號(hào)。

不過要注意,真實(shí)世界中的郵箱規(guī)則非常復(fù)雜。

在業(yè)務(wù)系統(tǒng)中,如果只是做基礎(chǔ)格式校驗(yàn),這樣的正則通常夠用;如果是嚴(yán)肅的注冊(cè)、登錄或郵件投遞場(chǎng)景,還需要結(jié)合郵件發(fā)送驗(yàn)證。

10. 實(shí)戰(zhàn)三:提取 HTML 標(biāo)簽內(nèi)容

代碼中還有一個(gè)提取 HTML 標(biāo)簽內(nèi)容的例子:

html = "<h1>標(biāo)題</h1><p>段落</p>"
contents = re.findall(r"<\w+>(.*?)</\w+>", html)

print(contents)

輸出結(jié)果:

['標(biāo)題', '段落']

這個(gè)正則表達(dá)式是:

r"<\w+>(.*?)</\w+>"

可以這樣理解:

  • <\w+>:匹配開始標(biāo)簽,比如 <h1>、<p>;
  • (.*?):提取標(biāo)簽中間的內(nèi)容;
  • </\w+>:匹配結(jié)束標(biāo)簽,比如 </h1>、</p>。

這里的 (.*?) 很關(guān)鍵。

其中:

  • () 表示分組,findall() 會(huì)優(yōu)先返回分組內(nèi)容;
  • . 表示任意字符;
  • * 表示 0 次或多次;
  • ? 表示非貪婪匹配。

如果沒有 ?,正則可能會(huì)盡可能多地匹配內(nèi)容,導(dǎo)致結(jié)果不符合預(yù)期。

需要提醒的是,正則可以處理簡(jiǎn)單 HTML 片段,但不適合解析復(fù)雜 HTML 文檔。

如果是正式爬蟲或網(wǎng)頁解析任務(wù),更推薦使用 BeautifulSouplxml 這類專門的 HTML 解析庫(kù)。

11. search、match、findall、sub、split 怎么選

可以用下面這張表快速判斷:

方法用途
re.search()查找第一個(gè)匹配項(xiàng)
re.match()從字符串開頭開始匹配
re.findall()找出所有匹配內(nèi)容
re.sub()替換匹配內(nèi)容
re.split()按正則規(guī)則分割字符串

簡(jiǎn)單來說:

  • 想找一個(gè),用 search();
  • 想從開頭驗(yàn)證,用 match()
  • 想提取全部,用 findall()
  • 想替換文本,用 sub();
  • 想按復(fù)雜分隔符切分,用 split()

12. 為什么正則字符串前面常加 r

你會(huì)發(fā)現(xiàn)示例中的正則表達(dá)式大多寫成這樣:

r"\d+"

前面的 r 表示原始字符串。

它可以減少反斜杠轉(zhuǎn)義帶來的困擾。

比如正則中的 \d 表示數(shù)字,如果不用原始字符串,在更復(fù)雜的表達(dá)式中就很容易遇到雙重轉(zhuǎn)義問題。

所以寫 Python 正則時(shí),一個(gè)好習(xí)慣是:

正則表達(dá)式盡量使用 r"..." 這種原始字符串形式。

小結(jié)

本文從幾個(gè)常見例子出發(fā),介紹了 Python re 模塊的基礎(chǔ)用法。

核心內(nèi)容包括:

  • re.search() 查找手機(jī)號(hào)和郵箱;
  • re.findall() 提取所有數(shù)字;
  • re.sub() 替換匹配內(nèi)容;
  • re.split() 按多個(gè)分隔符拆分文本;
  • 理解常見正則符號(hào);
  • 使用 re.match() 驗(yàn)證手機(jī)號(hào)和郵箱格式;
  • 用分組和非貪婪匹配提取簡(jiǎn)單標(biāo)簽內(nèi)容。

正則表達(dá)式剛開始看起來有點(diǎn)像“符號(hào)密碼”,但它的核心思想其實(shí)很簡(jiǎn)單:

用一套規(guī)則去描述你想匹配的字符串。

當(dāng)你掌握了常用符號(hào)和幾個(gè)基礎(chǔ)方法之后,就可以用正則快速完成很多文本處理任務(wù)。

以上就是Python正則表達(dá)式從匹配手機(jī)號(hào)到提取文本內(nèi)容的基礎(chǔ)用法詳解的詳細(xì)內(nèi)容,更多關(guān)于Python正則表達(dá)式基礎(chǔ)用法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Pytorch搭建YoloV5目標(biāo)檢測(cè)平臺(tái)實(shí)現(xiàn)過程

    Pytorch搭建YoloV5目標(biāo)檢測(cè)平臺(tái)實(shí)現(xiàn)過程

    這篇文章主要為大家介紹了Pytorch搭建YoloV5目標(biāo)檢測(cè)平臺(tái)實(shí)現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • Python3簡(jiǎn)單爬蟲抓取網(wǎng)頁圖片代碼實(shí)例

    Python3簡(jiǎn)單爬蟲抓取網(wǎng)頁圖片代碼實(shí)例

    這篇文章主要介紹了Python3簡(jiǎn)單爬蟲抓取網(wǎng)頁圖片代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python如何實(shí)現(xiàn)簡(jiǎn)單調(diào)用c++庫(kù)

    python如何實(shí)現(xiàn)簡(jiǎn)單調(diào)用c++庫(kù)

    這篇文章主要為大家詳細(xì)介紹了python如何實(shí)現(xiàn)簡(jiǎn)單調(diào)用c++庫(kù),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-03-03
  • python實(shí)現(xiàn)去除空格及tab換行符的方法

    python實(shí)現(xiàn)去除空格及tab換行符的方法

    這篇文章主要為大家介紹了python實(shí)現(xiàn)去除空格及tab換行符的方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 利用python編寫自動(dòng)整理下載目錄工具

    利用python編寫自動(dòng)整理下載目錄工具

    經(jīng)常用電腦的一定會(huì)遇到這種情況:每天我們都在從瀏覽器、微信、釘釘里下各種文件,什么截圖、合同、安裝包、臨時(shí)文檔,全都堆在下載文件夾里,結(jié)果某天想找一個(gè)發(fā)票 PDF 找了快十分鐘,才找到,所以本文給大家分享如何利用python編寫一個(gè)自動(dòng)整理下載目錄工具
    2025-05-05
  • Flask框架web開發(fā)之零基礎(chǔ)入門

    Flask框架web開發(fā)之零基礎(chǔ)入門

    這篇文章主要介紹了Flask框架web開發(fā)之零基礎(chǔ)入門,簡(jiǎn)單的介紹了如何使用及其數(shù)據(jù)庫(kù)集成,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • python裝飾器常見使用方法分析

    python裝飾器常見使用方法分析

    這篇文章主要介紹了python裝飾器常見使用方法,結(jié)合實(shí)例形式分析了Python裝飾器的功能及三種常見的裝飾模式使用技巧,需要的朋友可以參考下
    2019-06-06
  • Python中方法的缺省參數(shù)問題解讀

    Python中方法的缺省參數(shù)問題解讀

    這篇文章主要介紹了Python中方法的缺省參數(shù)問題解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • OpenCV 模板匹配

    OpenCV 模板匹配

    這篇文章主要介紹了OpenCV 模板匹配功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 對(duì)python3 中方法各種參數(shù)和返回值詳解

    對(duì)python3 中方法各種參數(shù)和返回值詳解

    今天小編就為大家分享一篇對(duì)python3 中方法各種參數(shù)和返回值詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12

最新評(píng)論

甘孜县| 宾阳县| 岳池县| 顺昌县| 武强县| 海伦市| 山东省| 鹤庆县| 陈巴尔虎旗| 丰都县| 扎兰屯市| 咸阳市| 汉阴县| 榆林市| 仁寿县| 临沧市| 义乌市| 萝北县| 黄龙县| 铅山县| 曲阳县| 东山县| 阿拉尔市| 新安县| 满洲里市| 安多县| 邯郸市| 开平市| 阳原县| 阿瓦提县| 沂源县| 英山县| 吐鲁番市| 达州市| 湖口县| 景德镇市| 马山县| 永安市| 缙云县| 洛阳市| 兰西县|