【问题标题】:X-Path + RegEx matching patternX-Path + RegEx 匹配模式
【发布时间】:2013-05-13 08:08:10
【问题描述】:

鉴于以下情况,

<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位数字的值,无论迭代如何。

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

谢谢。

【问题讨论】:

    标签: regex xpath query-string


    【解决方案1】:

    你的表达有两个问题:

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

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

    试试类似的东西

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2018-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-09
        • 2012-04-13
        • 1970-01-01
        • 2020-11-07
        相关资源
        最近更新 更多