XQuery字符串处理:如何同时实现指定前缀替换与横杠删除
XQuery实现方案
你代码里的for $x in $baseString是完全多余的,因为$baseString是单个字符串值,循环只会执行1次,直接删除不影响逻辑。
两个处理效果需要串行执行:由于前缀stringToReplace本身不含-,替换后的目标前缀replacedString也不含-,你可以选择先替换前缀再删除所有横杠,或者先删除后半段的横杠再拼接前缀,两种顺序都能得到正确结果。
可直接运行的正确代码
let $baseString := "stringToReplace-Rem-aining-String" return if (fn:substring($baseString,1,15) = 'stringToReplace' and fn:matches($baseString, "-+")) then fn:replace(fn:concat('replacedString', fn:substring($baseString, 16)), "-+", "") else $baseString
运行结果为replacedStringRemainingString,完全符合需求。
逻辑说明
- 条件判断保持原有校验规则不变,正则
(([-])+)可简化为-+,匹配效果完全一致 - 校验通过后,先拼接新前缀和原字符串16位之后的内容,得到中间结果
replacedString-Rem-aining-String - 把中间结果作为输入,用
fn:replace删除所有-,得到最终输出
内容的提问来源于stack exchange,提问作者Haris Rahim
相关产品推荐
相关产品推荐

