【问题标题】:Regex - How do you match everything except four digits in a row?正则表达式 - 除了连续四位数字外,您如何匹配所有内容?
【发布时间】:2015-07-01 18:54:56
【问题描述】:

使用正则表达式,您如何匹配除连续四位数字之外的所有内容?这是我可能正在使用的示例文本:

foo1234bar
baz      1111bat
asdf 0000 fdsa
a123b

匹配可能如下所示:

"foo", "bar", "baz      ", "bat", "asdf ", " fdsa", "a123b"

以下是我自己提出的一些正则表达式,但未能捕获我需要的所有内容:

[^\d]+            (this one includes a123b)
^.*(?=[\d]{4})    (this one does not include the line after the 4 digits)
^.*(?=[\d]{4}).*  (this one includes the numbers)

关于如何在四位序列之前和之后获得匹配的任何想法?

【问题讨论】:

  • 你使用什么语言/regax flavor
  • 我一直在使用regexr.com。我的最终目标是用换行符代替不是 4 位数字的所有内容。
  • 请看我更新的答案,它符合你想要的输出。
  • foo 12345 bar 变成了什么?
  • sample = 'foo 12345 bar' => ['foo ', ' bar']

标签: regex


【解决方案1】:

您尚未指定您的应用语言,但实际上每种应用语言都有拆分功能,如果您在\d{4} 上拆分,您将得到您想要的。

例如在java中:

String[] stuffToKeep = input.split("\\d{4}");

【讨论】:

    【解决方案2】:

    您可以使用否定前瞻:

    (?!\b\d{4}\b)(\b\w+\b)
    

    Demo

    【讨论】:

      【解决方案3】:

      Python 中,以下内容非常接近您想要的:

      In [1]: import re
      
      In [2]: sample = '''foo1234bar
         ...: baz      1111bat
         ...: asdf 0000 fdsa
         ...: a123b'''
      
      In [3]: re.findall(r"([^\d\n]+\d{0,3}[^\d\n]+)", sample)
      Out[3]: ['foo', 'bar', 'baz      ', 'bat', 'asdf ', ' fdsa', 'a123b']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-18
        • 2012-04-05
        • 2019-06-20
        • 2019-02-15
        相关资源
        最近更新 更多