[英]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]
- 6
或7
(?:-?\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.