重新匹配{和{{

时间:2019-03-30 22:31:33

标签: python regex bibtex

出于超出此处讨论范围的原因,我正在构建一个简单的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) 

但是如果该字段使用大括号,它将包含{和}。

  

是否有比测试[0] =='{'和[-1] =='}'

更简单的方法

1 个答案:

答案 0 :(得分:1)

尝试以下正则表达式:

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

在我的测试中,它与您的所有3个样本匹配。

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

以上正则表达式测试站点提供了有关特定内容的详细说明 正则表达式的受测部分以及已匹配的内容。

编辑

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

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

查看更新后的示例:https://regex101.com/r/Gy8IWu/2