首页 > 解决方案 > XQuery - 对字符串执行替换/匹配操作

问题描述

我有一个字符串,比如说,let $baseString := "stringToReplace-Rem-aining-String"。我想运行一个条件测试来检查是否$baseString包含"stringToReplace"and "-"if (fn:substring($baseString,1,15) = 'stringToReplace' and fn:matches($baseString, "(([-])+)"))如果是,我想'stringToReplace''replacedString'and"-"替换""(空白),所以,输出字符串应该是replacedStringRemainingString. 如何在 xQuery 中实现这一点?

到目前为止,我已经得到了 2 个以下单独的代码块工作 - 但我需要以某种方式将 2 个组合在一起。而且我真的不明白我在这里使用 for 循环的原因,但这是我让这个代码块执行而没有错误的方式。

let $baseString := "stringToReplace-Rem-aining-String"
for $x in $baseString return
if (fn:substring($baseString,1,15) = 'stringToReplace' and fn:matches($baseString, "(([-])+)")) 
then (fn:concat('replacedString',fn:substring($baseString,16,40))) 
 else ($baseString) 

这给出了 replacedString-Rem-aining-String 和的结果

let $baseString := "stringToReplace-Rem-aining-String"
for $x in $baseString return
if (fn:substring($baseString,1,15) = 'stringToReplace' and fn:matches($baseString, "(([-])+)")) 
then (fn:replace($baseString, "(([-])+)", ""))
 else ($baseString)

这给出了 的结果stringToReplaceRemainingString

请问有什么想法吗?

标签: if-statementreplacematchxquery

解决方案


您可以尝试将thens 组合到

then (
  let $tmp := fn:concat('replacedString',fn:substring($baseString,16,40))
  return fn:replace($tmp, "(([-])+)", "") 
) 

这至少可以获得您问题中字符串的预期输出。


推荐阅读