我正在写一个Scala脚本,它从几个来源获取信息,包括一个BibTeX文件。使用jbibtex library解析文件。正则表达式为LaTeX变音符逃脱?
我的中文提供源文件中包含的LaTeX风格逃逸非ASCII字符,如
笔者= {Fjeld,莫滕和SCH \“{一} R,西塞尔Guttormsen}
我试图用简单的更换,但失败了,因为我不能写一个适当的正则表达式来匹配逃逸。
我能想出是
最好3210但正则表达式引擎抱怨比赛。
java.util.regex.PatternSyntaxException:近指数非法重复2 \“{A}
据我所知,我应该逃避\
和正则表达式{
,但不"
或}
。不过,我尝试添加在日益随机的地方更多逃生的反斜杠:(但没有成功。
任何想法如何搭配呢?
更新 A-Umlaut转义解决方案非常简单(谢谢你Keppil)。这是
replace("\"{a}", "ä")
但LaTeX的也有其他字符转义,例如\{ss}
为ß
。
Scala不会让我在字符串中使用“{ss}”,所以我尝试使用原始字符串“”“{ss}”“”。然后整个更换拆开。
object Converter {
def cleanLatexEscapes(rawString: String): String = {
val aumlauts = rawString.replace("\"{a}", "ä")
val oumlauts = aumlauts.replace("\"{o}", "ö")
val uumlauts = oumlauts.replace("\"{u}", "ü")
val scharfesEs = uumlauts.replace("""\{ss}""", "ß")
return scharfesEs
}
}
import org.scalatest._
class ConverterSpec extends FlatSpec {
"cleanLatexEscapes" should "clean 'Käseklöße in der Küche'" in {
val escaped = """K\"{a}sekl\"{o}\{ss}e in der K\"{u}che"""
val cleaned = Converter.cleanLatexEscapes(escaped)
assert(cleaned === "Käseklöße in der Küche")
}
}
cleanLatexEscapes - 应该清理 'Käseklöße在德库车' *失败* “K [\äsekl\奥塞在德K]乌切” 不等于“K [äseklöße在德K] üche“
这里发生了什么,我该如何解决这个问题,这样才能涵盖变音器和scharfes es逃生?另外,方括号在测试输出中来自哪里?
对不起,我不得不删除接受的标记,因为这不适用于所有逃脱,只适用于元音变音。也许你可以扩展答案来覆盖这一切?我在问题中发布了更多信息。我对Scala仍然很陌生,并不确定整个逃生机制的工作原理。 – rumtscho