0

鉴于以下情况,

<Line>
    <Supplier>Fuel Surcharge - 36</Supplier>
    <Supplier>Fuel Surcharge - 35</Supplier>
    <Supplier>46081 46150 46250 46280 46286</Supplier>
    <Supplier>Fuel Surcharge - 35451</Supplier>
    <Supplier>46081</Supplier>
</Line>

这里的想法是当节点带有迭代的 5 位数字时返回“true”。

这是我到目前为止所做的,

matches(./Supplier, "[^(\d{5}\s*)+]");

此处的正则表达式是提取包含或不包含空格的 5 位数字的值,无论迭代如何。

我得到的结果都是真的。意味着它不正确的地方。你能帮我解决这个问题吗?

谢谢。

4

2 回答 2

1

你的表达有两个问题:

  • XPath 表达式末尾没有分号(语法错误)。
  • 您的正则表达式搞砸了,它匹配不包含字符类括号、数字、大括号、数字 5、空格以及星号和加号字符之外的任何内容的所有内容。
  • fn:matches(xs:string?, xs:string)需要两个字符串作为参数,您正在为第一个传递一系列字符串。

要为轴 step 中的每个节点调用函数,请将其添加为另一个函数(仅限 XPath 2.0 及更高版本)。您可以在参数中使用点.(上下文)。

尝试类似的东西

./Supplier/matches(., "^(\d{5}\s*)+$")

对于第三行和第五行,这将产生 true。如果它只必须包含(而不是完全由)五位数字和空格的重复模式,请从正则表达式中删除^and 。$

于 2013-05-13T08:55:23.603 回答
0

试试这个:matches(./Supplier, '(.*)((\d{5}(\s*))+)(.*)')

于 2013-05-13T09:05:35.050 回答