Regex 带括号的正则表达式

Regex 带括号的正则表达式,regex,Regex,我正在尝试从字符串中删除以下内容: 字符串: Snowden (left), whose whereabouts remain unknown, made the extraordinary claim as his father, Lon (right), told US television he intended to travel 我正在使用以下正则表达式:([(].[]),但它是匹配的: (left), whose whereabouts remain unknown, made t

我正在尝试从字符串中删除以下内容:

字符串:

Snowden (left), whose whereabouts remain unknown, made the extraordinary claim as his father, Lon (right), told US television he intended to travel
我正在使用以下正则表达式:
([(].[])
,但它是匹配的:

(left), whose whereabouts remain unknown, made the extraordinary claim as his father, Lon (right)
这是有道理的,但不是我想要的

我能做些什么来解决这个问题?这与贪婪或懒惰有关吗

编辑:

我正在使用Python:

paren = re.findall(ur'([(\u0028][^)\u0029]*[)\u0029])', text, re.UNICODE)

        if paren is not None:
                text = re.sub(s, '', text)
这将导致以下输出:

 Snowden (), whose whereabouts remain unknown, made the extraordinary claim as his father, Lon (), told US television he intended to travel
然而,当我打印paren.group(0)时,我得到了“(left)”,这意味着包含括号,这是为什么


谢谢。

限制。*仅匹配非括号的内容:

([(][^()]*[)])

限制。*仅匹配非括号的内容:

([(][^()]*[)])
使用否定:
([(][^]*[)])
。这将匹配开头的
,然后是非结束
,然后是结束

可以用这种方法对任何字符或字符集求反。要匹配文字插入符号,可以将其置于
[]
字符集之外,或将其置于第一个字符之后的任何位置,如:
[a^bc]
。阅读您正在使用的正则表达式语言的规则总是一个好主意,以便确切地了解可能的内容和正确的语法

贪婪或懒惰是一条规则,在所有正则表达式实现中可能实现的方式都不相同(如果有的话)。最好明确地说出你想要找到什么,而不是依赖于一个难以理解和调试(有时)的规则。

使用否定:
([(][^)]*[)])
。这将匹配开头的
,然后是非结束
,然后是结束

可以用这种方法对任何字符或字符集求反。要匹配文字插入符号,可以将其置于
[]
字符集之外,或将其置于第一个字符之后的任何位置,如:
[a^bc]
。阅读您正在使用的正则表达式语言的规则总是一个好主意,以便确切地了解可能的内容和正确的语法

贪婪或懒惰是一条规则,在所有正则表达式实现中可能实现的方式都不相同(如果有的话)。最好明确地说出您想要找到的内容,而不是依赖(有时)难以理解和调试的规则。

  • 首先,一个字符不需要[]。别插嘴了
  • 第二,使用。*?非贪婪匹配

    /\(.*?\)/

      • 首先,一个字符不需要[]。别插嘴了
      • 第二,使用。*?非贪婪匹配

        /\(.*?\)/

      正如pguardiario提到的(我投票支持他),您不需要字符类,只需将括号转义即可

      他的解决方案将起作用,但有一点需要注意:如果括号内的文本是硬包装的,
      将无法捕获
      \n
      。你需要一个角色类

      我提议的解决办法:

      \([^)]*\)
      
      这将转义两端的括号,并将始终捕获括号内的任何内容(当然,除非它包含另一个附加子句)。

      正如pguardiario提到的(我投了更高的票),您不需要字符类,只需转义括号即可

      他的解决方案将起作用,但有一点需要注意:如果括号内的文本是硬包装的,
      将无法捕获
      \n
      。你需要一个角色类

      我提议的解决办法:

      \([^)]*\)
      

      这将跳过两端的括号,并始终捕获括号内的任何内容(当然,除非它包含另一个附加子句)。

      这是一个风格问题,但我更喜欢
      [(]
      而不是
      \(
      所以我会使用
      ([([])*[)

      您还没有指定使用哪种语言。如果是Perl,我将使用/x限定符,以允许我添加空格以保持清晰

      / ( [(] [^)]* [)] ) /x
      

      这是风格的问题,但我更喜欢
      [(]
      而不是
      \(
      ),所以我会使用
      ([(][^)]*[)]

      您还没有指定使用哪种语言。如果是Perl,我将使用/x限定符,以允许我添加空格以保持清晰

      / ( [(] [^)]* [)] ) /x
      

      使用否定:
      ([(][^)]*[)]
      。这将匹配开头的
      ),然后匹配不是结尾的任何字符数
      ,然后是结尾的
      。我不知道您可以这样做,谢谢!!使用否定:
      ([(][^]*[)])
      。这将匹配开头的
      ,然后是不是结尾的任何字符数
      ,然后是结尾的
      。我不知道你可以这样做,谢谢!!等等,在多行模式下,
      将匹配
      \n
      -在非多行模式下,它无论如何都不会匹配。所以我认为这个警告没有多大意义。等等,在多行模式下,
      将匹配
      \n
      -在非多行模式下,它无论如何都不会匹配。所以我认为这个警告没有多大意义。