2

我需要使用 replace() 函数在 XQuery 中用单个破折号替换多个空白字符。

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

我试过了:

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

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

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

谢谢!- 丹

4

2 回答 2

4

你有斜线错误的方式:

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

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

[编辑:正如 Oliver Hallam 在评论中指出的那样,XQuery 规范实际上要求如果模式可能导致零长度匹配,则会引发错误。]

因此,您可能想要/必须使用+(这意味着 1 个或多个字符)来代替:

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

顺便说一句,您的其他尝试(使用固定斜杠)将匹配单个空格字符以及后面的任何内容。

于 2013-04-15T21:17:35.153 回答
0

两个额外的解决方案:

一个简单的 XPath 1.0 表达式

translate(normalize-space($vInput), ' ', '-')

还有一个 XPath 2.0 表达式,它不仅替换了空格组,还替换了任何标点符号或分隔符组

replace($vInput, '(\p{P}|\p{Z})+', '-')
于 2013-04-21T17:21:03.433 回答