重新匹配{和{{

2024-04-19 11:51:26 发布

您现在位置:Python中文网/ 问答频道 /正文

出于超出本文范围的原因,我正在构建一个简单的bibtex解析器。一些bibtex字段由一个大括号分隔,而其他字段由两个大括号分隔。大括号也是字段的有效内容。你知道吗

我知道一个字符串对应一个字段,格式如下:

fieldName1 = {{ content }},\n    -> content
fieldName2 = { content },\n      -> content
fieldName3 = { {[}content,] },\n -> {[}content,]

使用此模式,我可以恢复内容:

re.compile(r"(?P<name>[\w-]+?)[\s]*=[\s]*({(?P<content>.*)})",    flags=re.IGNORECASE|re.DOTALL) 

但如果该字段使用双大括号,则它将包含{和}。你知道吗

Is there an easier way to remove them than to test [0]=='{' and [-1]=='}'


Tags: to字符串re解析器内容格式模式原因
1条回答
网友
1楼 · 发布于 2024-04-19 11:51:26

请尝试以下正则表达式:

(?P<name>[\w-]+?)\s*=\s*{(?:{| {\[})?\s*(?P<content>.*?)(?:,])?\s*}{1,2}

在我的测试中,它和你的3个样本都匹配。你知道吗

有关工作示例(包含上述正则表达式的测试),请参见https://regex101.com/r/Gy8IWu/1

上面的regex测试站点提供了关于特定 正在测试的正则表达式的部分和匹配的部分。你知道吗

编辑

根据您的评论,匹配所有3个变体的正则表达式是:

(?P<name>[\w-]+?)\s*=\s*{{1,2}\s*(?P<content>(?:{\[})?.*?)\s*}{1,2}

请参见更新的示例:https://regex101.com/r/Gy8IWu/2

相关问题 更多 >