出于超出此处讨论范围的原因,我正在构建一个简单的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] =='}'
更简单的方法
答案 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