Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于解析具有可选嵌套组的字符串列表的正则表达式_Python_Regex_Nested - Fatal编程技术网

Python 用于解析具有可选嵌套组的字符串列表的正则表达式

Python 用于解析具有可选嵌套组的字符串列表的正则表达式,python,regex,nested,Python,Regex,Nested,我有一个大字符串,其形式如下: [“一些文本[ARG1:一些内部文本[1:一些其他文本],以及[其他内部文本[TAG:TAG_TYPE(0.99)]”,“一些其他文本(括号中的一些文本[2:单词[ARG1:更多单词[ARGM-TYPE:更多嵌套单词]][方括号中的其他文本[])” 我希望捕获单引号中的所有内容,我可以通过简单的 (“(.*?”) 现在在这个捕获组中,我想捕获所有其他可能的组,包括可选的嵌套子组 我可以自己捕获一些子组,例如: (\[ONTOTYPE:PERSON\((0\.(\d

我有一个大字符串,其形式如下:
[“一些文本[ARG1:一些内部文本[1:一些其他文本],以及[其他内部文本[TAG:TAG_TYPE(0.99)]”,“一些其他文本(括号中的一些文本[2:单词[ARG1:更多单词[ARGM-TYPE:更多嵌套单词]][方括号中的其他文本[])”

我希望捕获单引号中的所有内容,我可以通过简单的
(“(.*?”)

现在在这个捕获组中,我想捕获所有其他可能的组,包括可选的嵌套子组

我可以自己捕获一些子组,例如:
(\[ONTOTYPE:PERSON\((0\.(\d{1,4})\))\])

但我似乎错过了一些处理可选嵌套的基本见解。 如果我缺少一些概念,我欢迎链接到任何好的解释

我知道命名捕获组的概念,但我认为在这里使用它们只会增加混乱

作为参考,我目前的尝试如下:

特别是,match 1中的组15有一个子字符串,该子字符串与其中一个表达式匹配,但没有进一步解析它

预计到达时间: 以下是一些输入和预期输出的示例:
让我们使用regex101页面中的一个:
“[ARG0:that][R-ARG0:who][V:diseased][ARG1:from[0:theschool]]从省秘书晋升为名义顾问。”-->
{ARG0:那些,R-ARG0:谁,V:毕业,ARG1:来自,0:学校,}
。我已经将匹配1转换为dict,键值对是groups1,而不是按匹配顺序

让我们使用列表开头的较大示例,并使用编号的捕获组:
['2建筑师:[V:Stasov][ARG1:V.P.Melnikov][ARG1:A.][ARGM-LOC][2:I.Suzor P.Yu[ONTOTYPE:PERSON(0.851)]]建筑年份:[1:1835],1895-1910[ONTOTYPE:DATE(0.8774)]风格:古典主义[0:School of Law]古典主义[3:Fontanka河[ONTOTYPE:WORK OF_ART(0.8261)],[4:6-柴可夫斯基街],[5:1-奥鲁日尼克-费多罗夫街],2-A.A.Rzhevsky House 1790[ONTOTYPE:DATE(0.7046)]-[0:法学院][1:1835]-斯塔索夫·瓦西里·彼得罗维奇拱门[ONTOTYPE:PERSON(0.4863],arch.Melnikov Avraham Ivanovich[个体类型:人(0.7781)](?)'
变成

group 1: 2 Architects
group 2: V
group 3: Stasov
group 4: ARG1
group 5: V.P. Melnikov
group 6: ARG1
group 7: A
group 8: ARGM-LOC
group 9: 2
group 10: I.   Suzor   P.   Yu
group 11: ONTOTYPE: PERSON (0.851)
group 12: Year of construction
group 13: 1
group 14: 1835
等等

更新:我现在构建了我的正则表达式的第二个版本: 我们希望首先捕获所有简单的组(这种情况经常发生),然后使用backreference尝试在其他组中选择性地捕获它们。 仍然不知道如何将所有这些应用于单引号之间的字符串(
(“(.*?”)
组)


似乎我需要一些方法来避免捕获所有组:一旦找到匹配项,正则表达式引擎就不会检查它是否符合不同的模式。

请尝试下面的程序


(?您能提供示例输入和预期输出吗?让我们使用regex101页面中的一个:
“[ARG0:that][R-ARG0:who][V:graded][ARG1:from[0:theschool]]从省秘书晋升为名义顾问。”
-->
{ARG0:那些,R-ARG0:谁,V:毕业,ARG1:来自,0:学校,}
。我已经将匹配1转换为dict,键值对是groups1,而不是匹配顺序。我可以提供更多输入-->输出示例,但注释似乎太小,无法包含它们。请更新有问题的注释。这对其他人也有帮助。@tripleee,很好,但我认为:1)我要处理的不是任意嵌套,而是以可预测的方式嵌套,并达到一定的“深度”关于嵌套性;2)对于这种情况,仍然有基于正则表达式的解决方案。但是,如果正则表达式对于我的特定情况来说是错误的方法,你会推荐什么?这是一个很好的解决方案。你能详细说明为什么它会起作用,以及你是如何实现这种特定的“向后看”和“向前看”顺序的吗?顺便说一句,我已经决定我实际上是这样做的需要重新计算所有数据并以更易于管理的格式(如JSON)存储。JSON是一个好主意,因为我们可以有更多的控制。我通过分析数据中的常见模式来了解上面的正则表达式。这里,您提到的数据组被方括号和冒号(以及空格)包围。因此我在正则表达式中使用了它。
group 0: '  2  Architects
group 1: V
group 2: Stasov
group 3: ARG1
group 4: V.  P.  Melnikov
group 5: ARG1
group 6: A.
group 7: ARGM  -  LOC
group 8: 2
group 9: I.   Suzor   P.   Yu
group 10: ONTOTYPE
group 11: PERSON (0.851)
group 12: .  Year  of  construction
group 13: 1
group 14: 1835
group 15: ,  1895  -  1910
...
...