任何非单词字符最后一次出现之前的子串 xslt 2.0 3.0
substring-before the last occurrence of any non-word character xslt 2.0 3.0
与此问题类似,但在 XSLT 2.0 或 3.0 中,我想在最后一个非单词字符(如正则表达式 \W)处打断
Finding the last occurrence of a string xslt 1.0
输入为REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX
期望的输出是:
REMOVE-THIS-IS-A-TEST-LINE,XXX,
这一次适用于一个分隔符,但我至少需要在逗号、空格和破折号处打断。
substring('REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX',1,index-of(string-to-codepoints('REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX'),string-to-codepoints(' '))[last()])
我在 saxon 9.9EE 和天线罩上使用氧气。
你可以根据tokenize()
拆分字符串,然后使用[]
索引或subsequence()
,然后join()
将它重新组合在一起,但最简洁的方法可能是使用正则表达式在字符串领域完成这一切...
这个 XPath,基于 ,
个分隔符,
replace('REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX', '(.*,).+', '')
或者这个XPath,基于\W
non-word-character,
replace('REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX', '(.*\W).+', '')
将return
REMOVE-THIS-IS-A-TEST-LINE,XXX,
根据要求。
我愿意
replace('REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX', '(\W)\w*$', '')
但是,这涉及到back-tracking,所以如果在长线上完成可能会很昂贵。为了避免回溯,尝试
string-join(
analyze-string(
'REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX', '\W')
/*[not(position()=last())])
与此问题类似,但在 XSLT 2.0 或 3.0 中,我想在最后一个非单词字符(如正则表达式 \W)处打断
Finding the last occurrence of a string xslt 1.0
输入为REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX
期望的输出是:
REMOVE-THIS-IS-A-TEST-LINE,XXX,
这一次适用于一个分隔符,但我至少需要在逗号、空格和破折号处打断。
substring('REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX',1,index-of(string-to-codepoints('REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX'),string-to-codepoints(' '))[last()])
我在 saxon 9.9EE 和天线罩上使用氧气。
你可以根据tokenize()
拆分字符串,然后使用[]
索引或subsequence()
,然后join()
将它重新组合在一起,但最简洁的方法可能是使用正则表达式在字符串领域完成这一切...
这个 XPath,基于 ,
个分隔符,
replace('REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX', '(.*,).+', '')
或者这个XPath,基于\W
non-word-character,
replace('REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX', '(.*\W).+', '')
将return
REMOVE-THIS-IS-A-TEST-LINE,XXX,
根据要求。
我愿意
replace('REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX', '(\W)\w*$', '')
但是,这涉及到back-tracking,所以如果在长线上完成可能会很昂贵。为了避免回溯,尝试
string-join(
analyze-string(
'REMOVE-THIS-IS-A-TEST-LINE,XXX,XXXXX', '\W')
/*[not(position()=last())])