拆分多个(嵌套的)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']
阅读更多信息这正是我需要的,我只知道命名捕获,但从未使用过它们。多谢各位!