XSLT 2.0正则tokenize分号问题:避免文献条目首字母被切割
解决Zotero文献引用字符串的Tokenize分割问题
你当前的正则表达式;\s[^\d]会匹配分号、空格以及后续的非数字字符,分割时会把这个非数字字符从下一个文献条目中移除,导致首字母丢失。
正确的正则表达式
使用正向否定先行断言实现只在分号后不是空格加数字的位置分割,且不消耗后续字符:
;\s(?!\d)
修改后的XSLT 2.0代码
<xsl:for-each select="tokenize(zotero,';\s(?!\d)')"> <bibl><xsl:value-of select="."/></bibl> </xsl:for-each>
输出结果
处理给定输入字符串后,将得到正确的文献条目:
<bibl>(Leppin 2019</bibl> <bibl>Francisco 2011, 119</bibl> <bibl>van Ginkel 2005, 43–44; 1995, 114–115; 126; 147; 166–67)</bibl>
原理说明
(?!\d)是正向否定先行断言,它仅验证分号+空格之后的字符不是数字,但不会匹配该字符。这样分割时只会拆分不同的文献条目,不会破坏条目的首字符,同时保留页码部分的分号。
内容的提问来源于stack exchange,提问作者wsalesky
相关产品推荐
相关产品推荐

