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]
。阅读您正在使用的正则表达式语言的规则总是一个好主意,以便确切地了解可能的内容和正确的语法
贪婪或懒惰是一条规则,在所有正则表达式实现中可能实现的方式都不相同(如果有的话)。最好明确地说出您想要找到的内容,而不是依赖(有时)难以理解和调试的规则。- 首先,一个字符不需要[]。别插嘴了
- 第二,使用。*?非贪婪匹配 /\(.*?\)/
- 首先,一个字符不需要[]。别插嘴了
- 第二,使用。*?非贪婪匹配 /\(.*?\)/
将无法捕获\n
。你需要一个角色类
我提议的解决办法:
\([^)]*\)
这将转义两端的括号,并将始终捕获括号内的任何内容(当然,除非它包含另一个附加子句)。正如pguardiario提到的(我投了更高的票),您不需要字符类,只需转义括号即可
他的解决方案将起作用,但有一点需要注意:如果括号内的文本是硬包装的,
将无法捕获\n
。你需要一个角色类
我提议的解决办法:
\([^)]*\)
这将跳过两端的括号,并始终捕获括号内的任何内容(当然,除非它包含另一个附加子句)。这是一个风格问题,但我更喜欢
[(]
而不是\(
所以我会使用([([])*[)
您还没有指定使用哪种语言。如果是Perl,我将使用/x限定符,以允许我添加空格以保持清晰
/ ( [(] [^)]* [)] ) /x
这是风格的问题,但我更喜欢
[(]
而不是\(
),所以我会使用([(][^)]*[)]
您还没有指定使用哪种语言。如果是Perl,我将使用/x限定符,以允许我添加空格以保持清晰
/ ( [(] [^)]* [)] ) /x
使用否定:
([(][^)]*[)]
。这将匹配开头的(
),然后匹配不是结尾的任何字符数)
,然后是结尾的)
。我不知道您可以这样做,谢谢!!使用否定:([(][^]*[)])
。这将匹配开头的(
,然后是不是结尾的任何字符数)
,然后是结尾的)
。我不知道你可以这样做,谢谢!!等等,在多行模式下,
将匹配\n
-在非多行模式下,它无论如何都不会匹配。所以我认为这个警告没有多大意义。等等,在多行模式下,
将匹配\n
-在非多行模式下,它无论如何都不会匹配。所以我认为这个警告没有多大意义。