【问题标题】:Regex: Everything except some pattern正则表达式:除某些模式外的所有内容
【发布时间】:2015-06-22 06:57:55
【问题描述】:

我有一个字符串:

富吧
foo1 #9 0x103806f4 bar1
foo2 #10 0x0f6dd704 bar2
foo3 bar3

我尝试了以下方法:

^((?!#[\d]{1,2} 0x[0-9a-f]{8}).)*$

得到

富吧
foo3 bar3


^((?!#[\d]{1,2} 0x[0-9a-f]{8}).)*

得到

富吧
foo1
foo2
foo3 bar3

但我想得到的是

富吧
foo1 bar1
foo2 bar2
foo3 bar3

我怎样才能做到这一点?

【问题讨论】:

    标签: regex regex-negation


    【解决方案1】:

    您需要进行替换而不是匹配才能获得所需的输出。

    \s*#\d{1,2} 0x[0-9a-f]{8}
    

    使用上面的正则表达式,然后用空字符串替换匹配。

    DEMO

    【讨论】:

      【解决方案2】:

      如果您想要开头和结尾的非空白字符,则使用 Negative Lookahead 是行不通的。您可以按如下方式匹配您的预期输出:

      ^(\S+).*?(\S+)$
      

      然后用您喜欢的语言,您可以组合匹配结果: example ...

      >>> import re
      >>> s = '''foo bar
      foo1 #9 0x103806f4 bar1
      foo2 #10 0x0f6dd704 bar2
      foo3 bar3'''
      ...
      >>> for m in re.finditer(r'(?m)^(\S+).*?(\S+)$', s):
      ...     print(" ".join(m.groups()))
      
      foo bar
      foo1 bar1
      foo2 bar2
      foo3 bar3
      

      考虑拆分字符串并将索引连接在一起,而不是使用正则表达式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-26
        • 1970-01-01
        • 2022-08-21
        • 2011-07-03
        • 1970-01-01
        相关资源
        最近更新 更多