正则表达式:如何使我的代码与“ +”字符或数字匹配

我刚刚开始使用正则表达式。


我正在尝试搜索“短语”的简短列表,以查找英国的手机号码(以+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."]  


Helenr
浏览 168回答 3
3回答

哆啦的时光机

在您的正则表达式中,单词边界&nbsp;\b在空格和加号之间不匹配。您可以做的是匹配07或+44,然后匹配一个数字或空白一次或多次,[\d ]+然后\d匹配一个数字以使末尾不匹配空白,并在末尾添加单词边界\b。(?:07|\+44)[\d ]+\d\b

慕尼黑8549860

您应该能够通过从字符串中删除预期的“嘈杂字符”来覆盖所有情况,并将正则表达式简化为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'>&nbsp;&nbsp;<_sre.SRE_Match object; span=(10, 22), match='+44770090099'>希望能有所帮助。Pd .:“ \before”+表示您正在专门寻找+符号,而不是前一个元素的“ 1个或多个”。我提议\D44而不是的唯一原因\+44是因为您可能会更安全,因为人们可能会错过输入+号之前的电话号码。:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python