【发布时间】:2019-04-28 02:46:24
【问题描述】:
我必须使用 Java 正则表达式编写简单的 BibTeX 解析器。任务有点简化:每个标签值都在引号"" 之间,而不是括号{}。问题是,{} 可以在 "" 内部。
我正在尝试从整个字符串文件中剪切单个记录,例如。 G。我想将@book{...} 作为字符串。问题是最后一个标签后面不能有逗号,所以它可以像这样结束:author = "john"}。
我试过@\w*\{[\s\S]*?\},但如果我在"" 之间的任何标签值中有},它就会停止。也不能保证} 会在单独的行中,它可以直接在最后一个标签值之后(也可以不以" 结尾,因为它可以是整数)。
你能帮我解决这个问题吗?
【问题讨论】:
-
好吧,如果右括号可以是标签值的一部分,那么这很难做到。使用正则表达式的要求是困难的,还是您想出了这个作为解决方案?如果这是一个硬性要求,那么我认为它是一种学习练习,在这种情况下,您可以假设标签不包含大括号或声明不支持这些 - 目标可能是引导您做到这一点实现。
-
使用正则表达式是老师的建议,我在项目的其余部分也使用了它(因为这个问题是整个解析器的一部分)并且效果很好。虽然这是一种学习练习,但老师明确指出标签可能包含大括号。虽然我可能会使用 String.split(),但我不知道如何。