拆分多个(嵌套的)python子正则表达式定义

拆分多个(嵌套的)python子正则表达式定义,python,regex,Python,Regex,我有一个(可能)行分割定义文件,该文件具有以下类似模式: group-definition "first-regex" "second-regex" 两个子正则表达式都是实际的正则表达式,我需要检查“main”语法。Python返回应该为我获取以下数据: 实际的组定义语法 第一个正则表达式我需要作为独立正则表达式进一步处理 第二个正则表达式作为第一个需要进一步处理 此外,子正则表达式定义可能同时使用单引号和双引号,因此以下语法也可能是正确的: definition "first-regex

我有一个(可能)行分割定义文件,该文件具有以下类似模式:

group-definition "first-regex" "second-regex"
两个子正则表达式都是实际的正则表达式,我需要检查“main”语法。Python返回应该为我获取以下数据:

  • 实际的组定义语法
  • 第一个正则表达式我需要作为独立正则表达式进一步处理
  • 第二个正则表达式作为第一个需要进一步处理
此外,子正则表达式定义可能同时使用单引号和双引号,因此以下语法也可能是正确的:

definition "first-regex.*" 'second-regex[0-9]' #some comment
我还需要确定语法是否正确,因此无法识别以下字符串:

something-right "something wrong' 'really-\.wrong" wtf
这是因为我需要2个正则表达式来处理之后的数据,并且没有添加任何进一步的数据(除非它是以“#”或“;”开头的注释)

不幸的是,我在regex方面的经验并没有那么深刻,但我知道使用这样的东西不会像预期的那样起作用:

[\.]* (\".+?\")|(\'.+?\')[\ ](\".+?\")|(\'.+?\')
我想我需要一些关于正则表达式子组如何工作的更深入的知识,但我还不能理解如何使它们正确


我知道有很多关于这类主题的问题和答案,但我无法为这类问题找到正确的搜索上下文。

你走对了方向。我假设以下所有语句都是有效的

definition 'regex1' "regex2"
definition   # Comment
    'regex1' # Comment
    'regex2'
您可能需要查看命名捕获。您的模式应该允许每个参数之间有注释或空白。并且您必须记住使用re.S标志,它将允许您用“”捕获“\n”

重新导入
pattern=“”(?P[\w\-]+)#您的定义相当于[a-zA-Z\-]
(?P(\s |#.*.\n)*?)#可选以匹配注释和空格
(?P\'.'.\'.*?\”)正则表达式模式1
(?P(\s |#.*.\n)*?)#另一个可选中断
(?P\'.'.'.'.*?\”)模式2“
以open('your_document','r')作为f:
对于re.finditer(模式,f.read(),re.X | re.S)中的匹配:
#对每一场比赛都做些什么
re.X允许模式是冗长的。如前所述,re.S将允许您在中断子组中匹配新行。FindItemer是一个非常有用的工具,可以进行多次匹配,因为它将查找所有不重叠的匹配并生成匹配

(?Ppattern)
允许按名称访问子捕获。所以你可以通过

match['defininition']
匹配['reg1']
匹配['reg2']

阅读更多信息

这正是我需要的,我只知道命名捕获,但从未使用过它们。多谢各位!