簡體   English   中英

正則表達式匹配 8 位電話,每個數字之間帶有可選連字符

[英]Regex match 8-digit phone with optional hyphens between each digit

我想從段落中提取 8 位數字。 它可以在數字之間的任何位置包含一個可選的連字符,並且必須以 6 或 7 開頭,因此以下內容應匹配:

71234567
6-1234567
7-123-4567
61-23-45-67
7-1-2-3-4-5-6-7
...

我只想提取數字,所以在匹配 7-1-2-3-4-5-6-7 時,它只返回 71234567。

我試圖像這樣對其進行硬編碼:

[\b\D]([67]-?\d-?\d-?\d-?\d-?\d-?\d-?\d)[\b\D]

然后稍后手動刪除連字符,但它不起作用。

您不能從匹配的 substring 中省略字符。 您需要對匹配項進行后處理。

另外,請注意[\b\D]匹配退格字符或非數字字符。 [\b]單詞邊界不匹配。

您可以使用

numbers = [x.replace('-', '') for x in re.findall(r'\b[67](?:-?\d){7}\b', data)]
# or, if the number can be glued to a letter or underscore
numbers = [x.replace('-', '') for x in re.findall(r'(?<!\d)[67](?:-?\d){7}(?!\d)', data)]

請參閱正則表達式演示 詳情

  • \b - 單詞邊界
  • (?<!\d) - 如果當前位置的左側有一個數字,則匹配失敗
  • [67] - 67
  • (?:-?\d){7} - 出現七次可選-和數字序列
  • (?!\d) - 如果當前位置右側有一個數字,則匹配失敗。

請參閱Python 演示

import re
data = '71234567 6-1234567 7-123-4567  61-23-45-67  7-1-2-3-4-5-6-7'
print([x.replace('-', '') for x in re.findall(r'\b[67](?:-?\d){7}\b', data)])
# => ['71234567', '61234567', '71234567', '61234567', '71234567']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM