【问题标题】:XQuery - perform replace/match operation on stringXQuery - 对字符串执行替换/匹配操作
【发布时间】:2021-09-20 09:39:02
【问题描述】:

我有一个字符串,比如let $baseString := "stringToReplace-Rem-aining-String"。我想运行条件测试 检查$baseString 是否包含"stringToReplace""-"if (fn:substring($baseString,1,15) = 'stringToReplace' and fn:matches($baseString, "(([-])+)")), 如果是这样,我想用'replacedString' 替换'stringToReplace'"-"""(空白),所以,输出字符串应该是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-statement replace match xquery


    【解决方案1】:

    您可以尝试将thens 组合到

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

    至少对于您问题中的字符串,这将获得您的预期输出。

    【讨论】:

    • 这个答案和@Michaelkay 的答案都符合我的要求。
    【解决方案2】:

    试试:

    let $baseString := 'stringToReplace-Rem-aining-String'
    return
    if (matches($baseString, '^stringToReplace.*-'))  
    then ('replacedString' || translate(substring($baseString, 16), '-', ''))
    else $baseString 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-13
      • 2014-08-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多