XQuery - 对字符串执行 replace/match 操作
XQuery - perform replace/match operation on string
我有一个字符串,比方说,let $baseString := "stringToReplace-Rem-aining-String"
。我要运行条件测试
检查 $baseString
是否包含 "stringToReplace"
和 "-"
,
if (fn:substring($baseString,1,15) = 'stringToReplace' and fn:matches($baseString, "(([-])+)"))
,
如果是这样,我想将 'stringToReplace'
替换为 'replacedString'
,并将 "-"
替换为 ""
(空白),因此,输出字符串应为 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
的结果。
有什么想法吗?
您可以尝试将 then
组合到
then (
let $tmp := fn:concat('replacedString',fn:substring($baseString,16,40))
return fn:replace($tmp, "(([-])+)", "")
)
这至少会得到您问题中字符串的预期输出。
尝试:
let $baseString := 'stringToReplace-Rem-aining-String'
return
if (matches($baseString, '^stringToReplace.*-'))
then ('replacedString' || translate(substring($baseString, 16), '-', ''))
else $baseString
我有一个字符串,比方说,let $baseString := "stringToReplace-Rem-aining-String"
。我要运行条件测试
检查 $baseString
是否包含 "stringToReplace"
和 "-"
,
if (fn:substring($baseString,1,15) = 'stringToReplace' and fn:matches($baseString, "(([-])+)"))
,
如果是这样,我想将 'stringToReplace'
替换为 'replacedString'
,并将 "-"
替换为 ""
(空白),因此,输出字符串应为 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
的结果。
有什么想法吗?
您可以尝试将 then
组合到
then (
let $tmp := fn:concat('replacedString',fn:substring($baseString,16,40))
return fn:replace($tmp, "(([-])+)", "")
)
这至少会得到您问题中字符串的预期输出。
尝试:
let $baseString := 'stringToReplace-Rem-aining-String'
return
if (matches($baseString, '^stringToReplace.*-'))
then ('replacedString' || translate(substring($baseString, 16), '-', ''))
else $baseString