if-statement - 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
。
请问有什么想法吗?
解决方案
您可以尝试将then
s 组合到
then (
let $tmp := fn:concat('replacedString',fn:substring($baseString,16,40))
return fn:replace($tmp, "(([-])+)", "")
)
这至少可以获得您问题中字符串的预期输出。
推荐阅读
- javascript - 无法在 Formik 的 onSubmit 中调用 setState 函数
- node.js - Node.js/Express.js/consign(): 默认请求有效 ("/") 但 ("/tasks") 返回 502:Bad Gateway
- html - 重定向时出现烧瓶错误:TypeError: __init__() 采用 1 到 2 个位置参数,但给出了 3 个
- c# - 后台任务结束会触发 OnSuspending() 事件吗?
- java - 在 Java api 中的 Solr 搜索中需要搜索的文本和围绕它的几行
- ios - 但在 Xcode 10.3 中失败但在 Xcode 11.3 中工作
- bash - 如何在 ubuntu linux 上将 Flutter SDK 永久添加到 PATH?
- node.js - 如何通过查询拆分 SQL 文件?
- azure - 如何通过简单的生命周期管理在 Azure 上运行许多作业
- java - 哪个在执行 StringBuffer 或 StringBuilder 时花费更多时间?