由于超出此范围的原因,我正在构建一个简单的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] =='}'
试试以下正则表达式:
(?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