python 寫一個判斷文本中是否有手機號的函數,并提取出文本中的手機號

我們需要判斷文本中是否有手機號,并提取出手機號。 中國大陸的手機號規則: 1. 通常為11位數字。 2. 目前手機號段分配如下: - 移動號段:134(0-8)、135、136、137、138、139、147、148、150、151、152、157、158、159、172、178、182、183、184、187、188、195、198 - 聯通號段:130、131、132、145、146、155、156、166、175、176、185、186 - 電信號段:133、149、153、173、177、180、181、189、190、191、193、199 - 虛擬運營商:170、171 3. 但是,我們通常只需要考慮前三位(或者前兩位)來判斷是否屬于手機號段,另外還有一些號段是14x、16x、17x、18x、19x等。 注意:手機號可能出現在文本中的任何位置,可能與其他數字混合,所以我們需要用正則表達式來匹配。 考慮到手機號可能出現的情況: 1. 手機號可能是連續11位數字,但前后可能有其他字符(非數字),例如在文本中單獨出現,或者被空格、標點等隔開。 2. 手機號中間不應該出現空格、連字符等(因為題目要求的是手機號,一般我們認為是連續11位數字),但有時用戶可能會用分隔符,比如寫成“135-1234-5678”或“135 1234 5678”。不過,按照標準,我們通常認為連續11位數字,或者有時會加上分隔符,但題目沒有明確說明,所以這里我們按照連續11位數字來匹配,如果用戶使用了分隔符,那么可能就不匹配了。

所以,我們分兩步: 1. 用正則表達式匹配所有連續的11位數字,并且要求是以1開頭的。 2. 檢查每個匹配到的11位數字的前三位是否在有效的前三位集合中。 這樣,我們就能準確地提取手機號。 另外,為了避免匹配到其他長數字中的11位(比如身份證號中可能包含11位連續數字),我們可以在匹配時加上邊界限制(使用\b表示單詞邊界)。 但是,手機號在文本中可能出現的位置,前后可能不是空格,可能是標點,所以我們也可以使用非數字邊界:即匹配前后不是數字的位置。我們可以用負向零寬斷言,但這樣寫正則表達式會復雜。我們可以在匹配后,檢查匹配到的字符串前后字符是否為非數字(或者開頭和結尾),但正則表達式本身可以用\b來匹配單詞邊界,因為數字和漢字、字母、標點之間都有邊界。 因此,正則表達式可以寫為:r'\b1\d{10}\b',但是這樣會匹配所有1開頭的11位數字,然后我們再過濾前三位。 但是,注意:如果手機號在文本中緊跟著一個英文單詞,那么\b可能不起作用,因為\b是單詞邊界,而數字和字母之間被認為是邊界。所以,我們也可以使用:r'(?<!\d)1\d{10}(?!\d)',這表示前后不能是數字。這樣更好。 所以,我們使用正則表達式:`r'(?<!\d)(1\d{10})(?!\d)'` 來匹配前后不是數字的1開頭的11位數字。 步驟: 1. 導入re模塊 2. 定義有效的前三位集合(見上面) 3. 使用re.findall找到所有匹配的字符串 4. 遍歷匹配到的字符串列表,檢查前三位是否在有效集合中,如果在,則加入結果列表。 注意:有可能同一個手機號在文本中出現多次,我們都要提取出來。 函數設計: 輸入:文本字符串 輸出:返回兩個值:一個布爾值(表示是否有手機號),一個列表(包含所有提取到的手機號) 或者,我們可以直接返回提取到的手機號列表,然后通過判斷列表是否為空來確定是否有手機號。但是題目要求判斷是否有,并提取,所以我們可以返回一個元組:(has_phone, phone_list) 但是,也可以直接返回列表,然后由調用者判斷列表是否為空。這里按照要求,返回兩個值

import redef find_mobile_numbers(text):"""判斷文本中是否有手機號,并提取所有手機號。參數:text (str): 待檢查的文本返回:tuple: (是否存在手機號, 手機號列表)"""# 中國手機號正則表達式(匹配11位數字,以常見號段開頭)pattern = r'(?<!\d)(1(?:3[0-9]|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8})(?!\d)'# 查找所有匹配的手機號mobile_numbers = re.findall(pattern, text)# 返回結果(布爾值和手機號列表)return (bool(mobile_numbers), mobile_numbers)# 測試示例
if __name__ == "__main__":test_text = """我的聯系方式是:13800138000,備用號碼是18912345678。無效號碼:12345678901(首位錯誤)、1380013800(10位)、客服電話:10086,座機:0755-12345678。新號碼:17612345678,虛擬運營商:17012345678"""has_mobile, numbers = find_mobile_numbers(test_text)print("是否存在手機號:", has_mobile)print("提取到的手機號:", numbers)

函數說明:

  1. 正則表達式解析

    • (?<!\d):確保前面不是數字(防止匹配更長數字中的部分)

    • (1...):手機號以1開頭

    • (?:3[0-9]|...):匹配第二位和第三位(常見號段)

    • \d{8}:匹配剩余8位數字

    • (?!\d):確保后面不是數字(防止匹配更長數字中的部分

  2. 運行結果:

    是否存在手機號: True
    提取到的手機號: ['13800138000', '18912345678', '17612345678', '17012345678']

    進程已結束,退出代碼為 0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87029.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87029.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87029.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

作物生長模型Oryza V3實戰12:drate程序詳解

drate(v2).exe,可以通過觀察移植日、穗部分化、開花和成熟的物候日期(即日和年),DRATE(v2)用于校準四個階段的發展速率:幼苗期(DVRJ,oCday-1)、光周期敏感期(DVRI,oCday-1)、穗部發育期(DVRP,oCday-1)和生殖期(DVRR,oCday-1)。 一 準備輸入文件 1、準備.crp,.…

利用視覺-語言模型搭建機器人靈巧操作的支架

25年6月來自斯坦福和德國卡爾斯魯厄理工的論文“Scaffolding Dexterous Manipulation with Vision-Language Models”。 靈巧機械手對于執行復雜的操作任務至關重要&#xff0c;但由于演示收集和高維控制的挑戰&#xff0c;其訓練仍然困難重重。雖然強化學習 (RL) 可以通過在模…

面試拷打-20250701

memcopy和memmov 詳細解釋 示例1&#xff1a;不重疊的內存區域 正常復制。 示例2&#xff1a;重疊的內存區域 原始數據&#xff1a;src2是一個包含字符串"HelloWorld"的字符數組。使用memcpy&#xff1a; memcpy(src2 2, src2, 5);試圖將src2中的前5個字符復制…

什么是 BigKey?

Redis BigKey 深度解析&#xff1a;識別、危害與優化方案 什么是 BigKey&#xff1f; 在 Redis 中&#xff0c;BigKey 是指存儲大量數據的單個鍵&#xff0c;這些鍵通常具有異常大的內存占用或包含大量元素。BigKey 不是由數據類型定義&#xff0c;而是由其資源消耗決定的。 …

量化選股策略 聚寬

# 量化選股策略完整分析與優化建議 ## 策略整體架構分析 這個量化交易策略主要由以下幾個核心部分組成&#xff1a; 1. **初始化設置**&#xff1a;配置基準指數、交易參數和全局變量 2. **選股邏輯**&#xff1a;通過財務指標篩選優質股票 3. **股票過濾**&#xff1a;排除…

Python 數據分析:numpy,抽提,布爾索引2。

目錄 1 示例代碼2 歡迎糾錯3 論文寫作/Python 學習智能體------以下關于 Markdown 編輯器新的改變功能快捷鍵合理的創建標題&#xff0c;有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右S…

解決leetcode第3597題分割字符串

3597. 分割字符串 難度&#xff1a;中等 問題描述&#xff1a; 給你一個字符串 s&#xff0c;按照以下步驟將其分割為 互不相同的段 &#xff1a; 從下標 0 開始構建一個段。 逐字符擴展當前段&#xff0c;直到該段之前未曾出現過。 只要當前段是唯一的&#xff0c;就將其…

電源芯片之DCDC初探索ING

1. 概述 DC-DC轉換器的意思是直流變直流&#xff08;不同的直流電源值得轉換&#xff09;&#xff0c;是一種在直流電路中將一個電壓值的電能變為另一個電壓值的電能裝置。 DC-DC轉換器一般由控制芯片、電感線圈、二極管、三極管、電容器構成。 2. 基本拓撲結構 2.1 非隔離…

JavaEE:分布式session

一、使用Redis存儲分布式session&#xff1a; 1.SpringBoot整合Redis&#xff0c;見如下地址&#xff1a; JavaEE&#xff1a;SpringBoot整合Redis_a526001650a-CSDN博客 2.代碼實現分布式session存儲(此處以token為例)&#xff1a; Autowired private RedisTemplate<St…

OpenCV CUDA模塊設備層-----“大于閾值設為零” 的圖像處理函數 thresh_to_zero_inv_func()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 OpenCV 的 CUDA 模塊&#xff08;cudev&#xff09; 中的一個仿函數生成器&#xff0c;用于創建一個 “大于閾值設為零” 的圖像處理函數對象。 …

FastGPT與MCP:解鎖AI新時代的技術密碼

一、AI 浪潮中的新星&#xff1a;FastGPT 與 MCP 登場 在當今科技飛速發展的時代&#xff0c;人工智能&#xff08;AI&#xff09;已成為推動各行業變革的核心力量。從智能語音助手到復雜的圖像識別系統&#xff0c;AI 的應用無處不在&#xff0c;而其中的關鍵技術 —— 語言模…

browser-tools-mcp + excel-mcp-server + cursor 實現讀取網頁信息自動寫入Excel

browser-tools-mcp excel-mcp-server cursor 實現讀取網頁信息自動寫入Excel 文章目錄 browser-tools-mcp excel-mcp-server cursor 實現讀取網頁信息自動寫入Excel一、安裝node.js和npm1、安裝nvm2、安裝最新版本的node.js 二、安裝browser-tools-mcp1、安裝 BrowserTools…

Linux安裝JDK和Maven

Linux安裝JDK和Maven 安裝JDK1.8 oracle官網 https://www.oracle.com 下載包地址&#xff1a;https://www.oracle.com/java/technologies/downloads/archive/ 步驟1&#xff1a;官網下載壓縮包 點擊想要下載的版本&#xff0c;需要登錄Oracle的賬號&#xff0c;沒有的話需要…

MySQL主從復制與數據庫集群深度解析

一、主從復制核心架構與復制模式 MySQL主從復制是構建分布式數據庫的基礎技術&#xff0c;通過日志同步機制實現數據冗余與讀寫分離。其核心架構分為三層&#xff1a; 日志記錄層&#xff1a;主庫將數據變更寫入二進制日志&#xff08;Binlog&#xff09;網絡傳輸層&#xff…

安裝emsdk 4.0.10報Connection reset by peer解決

出錯如下: 使用瀏覽器下載所需文件 https://storage.googleapis.com/webassembly/emscripten-releases-builds/deps/node-v22.16.0-darwin-x64.tar.gz 移動到到emsdk/downloads下 修改emsdk.py download_even_if_exists=True 設置環境變量

win11,visual studio 2022,配置dcmtk,opencv

一、配置dcmtk 1 文件下載---地址&#xff0c;Software Development based on DCMTK - dicom.offis.de 源文件下載&#xff0c;選擇.zip下載&#xff0c;.tar.gz為Linux和macOS下面常見的壓縮包 支持庫下載 解決 DCMTK 在 Windows 上編譯時所需的依賴庫問題 libiconv GNU有…

2025 最新 Appium Inspector 環境搭建教程

1 環境搭建背景 版本升級&#xff1a;Appium 2.0 版本替代 1.x&#xff0c;原 Appium Desktop 因安全漏洞和功能廢棄不再適用。需求痛點&#xff1a;Android Studio 僅支持 debug 程序元素定位&#xff0c;需通過 Appium Inspector 實現通用 APK 元素定位。 2 環境搭建步驟 …

Vue 安裝使用教程

一、Vue 簡介 Vue&#xff08;讀作 /vju?/&#xff0c;類似于“view”&#xff09;是一款用于構建用戶界面的漸進式 JavaScript 框架。它易于上手&#xff0c;輕量高效&#xff0c;適合快速構建前端界面&#xff0c;廣泛應用于各類 Web 項目中。 二、Vue 安裝方式 2.1 直接通…

通過http調用來訪問neo4j時報錯,curl -X POST 執行指令報錯

curl -X POST ^ More? http://localhost:7474/db/neo4j/tx/commit ^ More? -H Authorization: Basic bmVvNGo6MTIzNDU2Nzg ^ More? -H Content-Type: application/json ^ More? -d { \"statements": [{\"statement": \"MATCH (n) RETURN n, label…

Node.js到底是什么

我想像是npm、vite這些名詞大家都很熟悉&#xff0c;對它們的作用也有大致印象&#xff0c;但是可能都像我一樣不明白Node.js到底是什么&#xff0c;這里給大家帶來一個簡單介紹。 Node.js 詳解&#xff1a;歷史發展、生態構建與底層原理 一、Node.js 的起源與歷史發展 誕生背…