代码之家  ›  专栏  ›  技术社区  ›  kheya

除了三个字符:|,^和~(一个管道、一个插入符号和一个颚化符)之外,接受任何内容的最短正则表达式是什么?

  •  2
  • kheya  · 技术社区  · 14 年前

    我有一个正则表达式,但它很大。我指定允许的字符集。 这使得它成为一个大的正则表达式。如果我可以指定相反的字符,即只指定我不接受的字符,会更简单吗?

    ^[^\|\^~]*$
    

    但它不起作用。有线索吗?

    2 回复  |  直到 14 年前
        1
  •  3
  •   tchrist    14 年前

    这将匹配不包含这三个字符的字符串:

    ^[^|^~]*$
    

    当它匹配所有包含这三个任意一个的字符串时:

    [|^~]
    

    这两种模式是等价的,因此您可以使用第一种模式,或者使用第二种模式进行否定。

        2
  •  1
  •   moinudin    14 年前

    你不能逃跑 | ~ 在内部 [] . 使用 ^[^|^~]*$ .

    >>> re.match(r'^[^|^~]*$', 'abc')
    <_sre.SRE_Match object at 0x2dbc4a8>
    >>> re.match(r'^[^|^~]*$', '^')
    >>> re.match(r'^[^|^~]*$', '|')
    >>> re.match(r'^[^|^~]*$', '~')
    

    也就是说,第一个例子匹配,其他三个根据需要失败。