【问题标题】:Ignore character in Regex Python?忽略Regex Python中的字符?
【发布时间】:2021-10-27 11:59:41
【问题描述】:

我想查找所有以“0”开头后跟 10 位数字的电话号码。

r1=re.search('^[0]+\d{10}',i)

但是,其中一些写为“01-234-567-8-90”,从技术上讲,它是一个 0 后跟 10 位数字,但其中包含破折号。当我运行正则表达式搜索命令时,它无法识别它。

有没有办法告诉正则表达式忽略某些字符,例如“”和“-”?

【问题讨论】:

  • * 是错字,请删除。
  • 您可能打算使用re.search(r'(?<!\d)0(?:-?\d){10}(?!\d)',i)。或者,r'^0(?:-?\d){10}$'。 “找到”是什么意思?您在哪里寻找匹配项?
  • 您是否被严格限制为一个re.search,或者您是否允许使用python 预处理文本?
  • @WiktorStribiżew 非常感谢,它有效。快速提问:我不明白语句中括号 () 的位置,具体来说:为什么我们这样做 ...0(?:-?\d){10}... 而不是 ...0(?:-?)\d{10}.... 换句话说,为什么要在括号中加上\d

标签: python regex wildcard


【解决方案1】:

你可以使用

re.search(r'0(?:-?\d){10}',i)

正则表达式匹配

  • 0 - 零位
  • (?:-?\d){10} - 匹配 10 个连续出现的非捕获组
    • -? - 可选连字符
    • \d - 一个数字。

请参阅regex demo

如果您不希望其他数字出现在匹配的两端,请添加数字边界:

(?<!\d)0(?:-?\d){10}(?!\d)

(?&lt;!\d)lookbehind 确保左侧没有数字,(?!\d)lookahead 确保右侧没有数字,因此我们匹配 11 位长的数字

【讨论】:

    【解决方案2】:

    我确信有更好的方法,但您可以在正则表达式搜索之前删除连字符。

    i.replace('-', ''))
    

    【讨论】:

      【解决方案3】:

      我想验证一下,你可以去掉“-”之类的

      phone_number_without_hyphens = phone.replace("-", "")
      

      然后通过正则表达式检查它

      re.search('^[0]+\d*{10}', phone_number_without_hyphens)
      

      【讨论】:

        【解决方案4】:
        ^[0(?:+44)][ -]?\d[ -]?\d[ -]?\d[ -]?\d[ -]?\d[ -]?\d[ -]?\d[ -]?\d[ -]?\d[ -]?\d$
        

        或 ^[0(?:+44)](?:[ -]?\d){10}$ 清洁剂

        【讨论】:

        • 虽然这段代码可以解决问题,但如果解释一下它的作用方式/原因,答案会好得多。请记住,您的答案不仅适用于提出问题的用户,还适用于所有其他找到该问题的人。
        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-27
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2019-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多