我需要使用replace()函数在XQuery中使用单个短划线替换多个空白字符。
$input: 'abc def 123'
Desired Output: 'abc-def-123'
我试过了:
replace($input, '/s*', '-')
和
replace($input, '/s.*', '-')
但这些不起作用。我知道normalize-space()但我想要一个更通用的函数。
谢谢! - 丹
答案 0 :(得分:4)
你的斜线是错误的:
replace($input, '\s*', '-')
此外,根据XQuery中的实现,这可能会在每两个非空格字符之间插入一个破折号(因为 < / p>
\s*
允许0个字符,因此任何空匹配)。
[编辑:正如Oliver Hallam在评论中指出的那样,XQuery specification实际上要求如果模式可以导致零长度匹配则会引发错误。]
因此,您可能需要/必须使用+
(即1个或多个字符)代替:
replace($input, '\s+', '-')
顺便说一句,你的另一次尝试(使用固定斜杠)会匹配一个空白字符加上之后的任何内容。
答案 1 :(得分:0)
另外两个解决方案:
一个简单的XPath 1.0表达式:
translate(normalize-space($vInput), ' ', '-')
XPath 2.0表达式不仅替换空格组,还替换任何标点符号或分隔符字符组:
replace($vInput, '(\p{P}|\p{Z})+', '-')