为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信