如何使用XQuery中的replace()函数替换一个或多个空格字符?

时间:2013-04-15 20:50:07

标签: regex xquery

我需要使用replace()函数在XQuery中使用单个短划线替换多个空白字符。

$input: 'abc   def   123'
Desired Output: 'abc-def-123'

我试过了:

replace($input, '/s*', '-')

replace($input, '/s.*', '-')

但这些不起作用。我知道normalize-space()但我想要一个更通用的函数。

谢谢! - 丹

2 个答案:

答案 0 :(得分:4)

你的斜线是错误的:

replace($input, '\s*', '-')

此外,根据XQuery中的实现,这可能会在每两个非空格字符之间插入一个破折号(因为\s*允许0个字符,因此任何空匹配)。 < / p>

[编辑:正如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})+', '-')