首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式:如何使代码与“+”字符或数字匹配

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

Stack Overflow用户
提问于 2018-06-22 14:38:24
回答 4查看 80关注 0票数 2

我刚开始学regex。

我试图搜索一个简短的‘短语’列表,以找到英国移动电话号码(从+44或07开始,有时以一个空格划分的数字开始)。我很难让它返回开始+44的号码。

这就是我写的:

代码语言:javascript
复制
for snippet in phrases:
    match = re.search("\\b(\+44|07)\\d+\\s?\\d+\\b", snippet)
    if match:
        numbers.append(match)
        print(match)

哪种指纹

代码语言:javascript
复制
    <_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之前反斜杠是否必要?对我错过了什么有什么想法吗?

感谢大家!

编辑:我的一些输入:

代码语言:javascript
复制
  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."]  
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-23 19:45:31

在正则表达式中,字界 \b不匹配空格和加号。

您可以做的是匹配07+44,然后匹配一个数字或一个空格一次或多次[\d ]+,然后再匹配一个数字\d,在末尾不匹配空格,并在末尾添加一个单词边界\b

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

演示Python

票数 1
EN

Stack Overflow用户

发布于 2018-06-22 15:35:51

正则表达式的问题是,第一个\b匹配+4之间的单词边界。空间和+之间的边界不是单词边界。这意味着它无法在+44之后找到\b,因为+位于\b的左边。在44的右边只有\b

要解决这个问题,您可以使用一个负面的回顾,以确保在+44之前没有单词。请记住将其放入捕获组中,因为只有在选择了+44选项时才应该匹配它。如果是以07开头的话,您仍然希望匹配一个单词边界。

代码语言:javascript
复制
((?!\w)\+44|\b07)\d+\s?\d+\b

您可以将正则表达式放在r""字符串中。这样你就不用写那么多斜杠了:

代码语言:javascript
复制
r"((?!\w)\+44|07)\d+\s?\d+\b"

演示

票数 1
EN

Stack Overflow用户

发布于 2018-06-22 14:46:33

这会有帮助的。

代码语言:javascript
复制
import re
phrases = ["Hello +4407700 900432 World", "Hello +44770090999 World"]
for snippet in phrases:
    match = re.search(r"(?P<num>(\+44|07)\d+\s?\d+)", snippet)
    if match:
        print(match.group('num'))

输出:

代码语言:javascript
复制
+4407700 900432
+44770090999
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50990333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档