亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式:如何使我的代碼與“ +”字符或數字匹配

正則表達式:如何使我的代碼與“ +”字符或數字匹配

Helenr 2021-04-07 13:10:17
我剛剛開始使用正則表達式。我正在嘗試搜索“短語”的簡短列表,以查找英國的手機號碼(以+44或07開頭,有時將數字分成一個空格)。我無法讓它返回以+44開始的數字。這是我寫的:for snippet in phrases:    match = re.search("\\b(\+44|07)\\d+\\s?\\d+\\b", snippet)    if match:        numbers.append(match)        print(match)哪個打印    <_sre.SRE_Match object; span=(19, 31), match='07700 900432'>    <_sre.SRE_Match object; span=(20, 31), match='07700930710'>卻漏掉了“短語”中的+44770090999這個數字。我嘗試了帶括號或不帶括號的情況。如果沒有括號,它也會以+ 10 + 44 = 54之類的總和打印出+44。+44之前的反斜杠是否必要?關于我所缺少的東西有什么想法嗎?謝謝大家!編輯:我的一些輸入:  phrases = ["You can call me on 07700 900432.",      "My mobile number is 07700930710",      "My date of birth is 07.08.92",      "Why not phone me on 202-555-0136?"      "There are around 7600000000 people on Earth",      "If you're from overseas, call +44 7700 900190",      "Try calling +447700900999 now!",      "56+44=100."]  
查看完整描述

3 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

在您的正則表達式中,單詞邊界 \b在空格和加號之間不匹配。

您可以做的是匹配07+44,然后匹配一個數字或空白一次或多次,[\d ]+然后\d匹配一個數字以使末尾不匹配空白,并在末尾添加單詞邊界\b。

(?:07|\+44)[\d ]+\d\b


查看完整回答
反對 回復 2021-04-13
?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

您應該能夠通過從字符串中刪除預期的“嘈雜字符”來覆蓋所有情況,并將正則表達式簡化為just "(07|\D44)\d{9}"。在哪里:


(07|\D44)搜索以07和44開頭的非數字字符的起始數字。 \d{9}搜索其余的9位數字。


您的代碼應如下所示:


cleansnippet = snippet.replace("-","").replace(" ","").replace("(0)","")...

re.search("(07|\D44)\d{9}", cleansnippet)

將其應用到您的輸入中將檢索到以下內容:


<_sre.SRE_Match object; span=(14, 25), match='07700900432'>

<_sre.SRE_Match object; span=(16, 27), match='07700930710'>

<_sre.SRE_Match object; span=(25, 37), match='+44770090019'>  

<_sre.SRE_Match object; span=(10, 22), match='+44770090099'>

希望能有所幫助。


Pd .:“ \before”+表示您正在專門尋找+符號,而不是前一個元素的“ 1個或多個”。


我提議\D44而不是的唯一原因\+44是因為您可能會更安全,因為人們可能會錯過輸入+號之前的電話號碼。:)


查看完整回答
反對 回復 2021-04-13
  • 3 回答
  • 0 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號