我有以下任務:
使用帶有 -Pao 選項和正則運算式的 grep 從損壞的檔案中提取所有電話號碼(解決方案:13 個電話號碼)。正則運算式應盡可能匹配以下電話號碼格式并盡可能短:

我嘗試使用數字的相應開頭,然后將它們放在一起并繼續前進。
我現在有以下代碼:
grep -Pao '(\ \d{2}.) | (\d{3,4}) | (\d\s\d{2})' kaputt.txt
(模式為PCRE)
不幸的是,代碼沒有回傳所需的結果,因為搜索條件似乎是相互排斥的。因此,我將不勝感激。
uj5u.com熱心網友回復:
管道兩側是否有毛坯?如果是,第一種情況實際上是 ( \d{2}.)\s ,它與任何格式都不匹配。
https://regex101.com/r/qDmGIC/1 - 但它也會匹配不需要的組合,如 111 (1)11 11
uj5u.com熱心網友回復:
試圖找到可能的絕對最短的正則運算式將是愚蠢的差事。以下應該沒問題,因為沒有格式似乎是另一種格式的擴展。
grep -Pao "(?:\ \d\d \d\d \d{7}|\ \d\d (\d\d) \d{5} \- \d\d|\ \d\d (\d)\d\d \d{5}\-\d\d|\ \d\d-\d\d\-\d{7}|\ \d\d \d\d \d{5}\-\d\d|\d{4} \d \d{6}|\d \d\d \/ \d\d \d\d \d\d|\d{8}\-\d\d)" kaputt.txt
它只是從所需格式的影像 (!) 中提取的文本,x替換為\d、-替換為\-、 替換為\ ,并且每個替代格式都以 分隔|。
如果要跨行匹配,-z則需要該標志,并且每個空格都可以替換為,例如\s 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/401257.html
標籤:正则表达式
