正则表达式提取括号和方括号中的嵌套模式

超级

我有

(LEFT-WALL)(who)(is.v)(Obama)(,)(I.p)(love.v)(his)(speech.s)(RIGHT-WALL)

一种模式,我将其拆分并获得列表中的每个括号项。我的正则表达式工作正常,但适用于(Ob(am)a)之类的嵌套文本

例子:

post_script_word_str = '(LEFT-WALL)(who)(is.v)(Obama)(,)(I.p)(love.v)(his)(speech.s)(RIGHT-WALL)'
post_script_word_list = re.compile(r'\(([^\)\(]*)\)').split(post_script_word_str)
print post_script_word_list

post_script_link_str = '[0 12 4 (RW)][0 7 3 (Xx)][0 1 0 (Wd)][1 2 0 (Ss)][2 6 2 (Ost)][3 6 1 (Ds)][3 4 0 (La)][5 6 0 (AN)][7 8 0 (Wq)][8 9 0 (EAh)][9 10 0 (AF)][10 11 0 (SIs)]'
post_script_link_str = re.compile(r'\[([^\]\[]*)\]').split(post_script_link_str)
print post_script_link_str

结果:

    ['', 'LEFT-WALL', '', 'who', '', 'is.v', 'Obama', ',', '', 'I.p', '', 'love.v', '', 'his', '', 'speech.s', '', 'RIGHT-WALL', '']

['', '0 12 4 (RW)', '', '0 7 3 (Xx)', '', '0 1 0 (Wd)', '', '1 2 0 (Ss)', '', '2 6 2 (Ost)', '', '3 6 1 (Ds)', '', '3 4 0 (La)', '', '5 6 0 (AN)', '', '7 8 0 (Wq)', '', '8 9 0 (EAh)', '', '9 10 0 (AF)', '', '10 11 0 (SIs)', '']

但是对于像这样的输入(Ob(am)a)还是[0 [1]2 4 (RW)]失败。我期望与上述相同的结果,但它给

['', 'LEFT-WALL', '', 'who', '', 'is.v', '(Ob', 'am', 'a)', ',', '', 'I.p', '', 'love.v', '', 'his', '', 'speech.s', '', 'RIGHT-WALL', '']

['[0 ', '1', '2 4 (RW)]', '0 7 3 (Xx)', '', '0 1 0 (Wd)', '', '1 2 0 (Ss)', '', '2 6 2 (Ost)', '', '3 6 1 (Ds)', '', '3 4 0 (La)', '', '5 6 0 (AN)', '', '7 8 0 (Wq)', '', '8 9 0 (EAh)', '', '9 10 0 (AF)', '', '10 11 0 (SIs)', '']

有什么建议吗?

更新的输入:

post_script_link_str = '[0 [1]2 4 (RW)][0 7 3 (Xx)][0 1 0 (Wd)][1 2 0 (Ss)][2 6 2 (Ost)][3 6 1 (Ds)][3 4 0 (La)][5 6 0 (AN)][7 8 0 (Wq)][8 9 0 (EAh)][9 10 0 (AF)][10 11 0 (SIs)]'

结果 :

['[0 ', '1', '2 4 (RW)]', '0 7 3 (Xx)', '', '0 1 0 (Wd)', '', '1 2 0 (Ss)', '', '2 6 2 (Ost)', '', '3 6 1 (Ds)', '', '3 4 0 (La)', '', '5 6 0 (AN)', '', '7 8 0 (Wq)', '', '8 9 0 (EAh)', '', '9 10 0 (AF)', '', '10 11 0 (SIs)', '']
卡西米尔和希波吕特

re模块无法处理嵌套结构。您需要使用具有递归功能新正则表达式模块顺便说一句,我认为该findall方法更适合此工作:

regex.findall(r'\[([^][]*+(?:(?R)[^][]*)*+)]', post_script_link_str)

您获得:

['0 [1]2 4 (RW)', '0 7 3 (Xx)', '0 1 0 (Wd)', '1 2 0 (Ss)', '2 6 2 (Ost)', '3 6 1 (Ds)', '3 4 0 (La)', '5 6 0 (AN)', '7 8 0 (Wq)', '8 9 0 (EAh)', '9 10 0 (AF)', '10 11 0 (SIs)']

现在,您需要映射列表以删除方括号。

图案细节:

(?R) 允许递归,因为它是整个模式的别名。

*+是所有格量词。*与regex引擎相同,但不允许其回溯。如果不幸的是不平衡括号,它在这里用于防止灾难性的回溯。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式中的嵌套方括号

正则表达式,多个括号和方括号

正则表达式提取方括号之间的文本

正则表达式从方括号中提取?

正则表达式以方括号提取键值

带有嵌套方括号的正则表达式

使用正则表达式提取不在方括号内的字符串模式

匹配 perl 正则表达式中括号和方括号之外的所有逗号

使用正则表达式提取方括号内的文本和外部文本

正则表达式提取方括号、逗号和引号 [] 之间的文本,"

正则表达式在方括号中查找句点

正则表达式中的方括号问题

正则表达式-从结果中删除方括号

正则表达式只删除特定嵌套级别的方括号中的文本?

正则表达式提取嵌套括号内的单词

Java正则表达式提取方括号或圆括号内的内容

正则表达式-检查方括号/括号是否未关闭(包括嵌套)

正则表达式以提取括号中的值java

使用正则表达式提取括号中的数字

正则表达式(PHP)仅提取方括号内的数字或字母(不包括方括号)

灾难性的回溯;正则表达式,用于提取嵌套括号中的值

正则表达式用于提取括号中的嵌套参数

PHP和正则表达式:检查字符串是否遵循带方括号的模式

正则表达式识别包含方括号的文本

NP ++:用于查找方括号的正则表达式

Java正则表达式匹配方括号

javascript正则表达式跳过方括号

方括号字符串的正则表达式

带方括号的正则表达式