10

我这里有一个字符串,This is a string: AAA123456789.

所以这里的想法是AAA123456789使用正则表达式提取字符串。

我将它与 X-Path 结合起来。

注意:如果有这个帖子,请引导我。

我认为,按道理,我应该substring(myNode, [^AAA\d+{9}])

我不太确定正则表达式部分。

这个想法是在遇到“AAA”并且只有数字但只有9个后续数字时提取字符串。

4

4 回答 4

10

纯 XPath 解决方案

substring-after('This is a string: AAA123456789', ': ')

产生

AAA123456789

XPath 2.0 解决方案

tokenize('This is a string: AAA123456789 but not an double',
              ' '
              )[starts-with(., 'AAA')]

或者:

tokenize('This is a string: AAA123456789 but not an double',
              ' '
              )[matches(., 'AAA\d+')]

或者:

replace('This is a string: AAA123456789 but not an double',
              '^.*(A+\d+).*$',
              '$1'
              )
于 2012-09-20T12:49:59.407 回答
4

好的,在这里参考了很棒的人的答案和评论后,我用我选择的这个解决方案总结了我的发现。开始,

concat("AAA", substring(substring-after(., "AAA"), 1, 9)).

所以我首先,以“AAA”作为第一个参数的字符串之后的子字符串,长度为 1 到 9 ......任何更多,被忽略。然后由于我使用 AAA 作为参考,因此不会出现,因此将 AAA 连接到值的前面。所以这意味着我将在 AAA 之后获得第一个 9 位,然后在前面连接 AAA,因为它是静态数据。

无论有什么其他贡献,这将允许数据正确。

但我喜欢@Dimitre 的正则表达式。替换部分。如果没有空间作为参数,则标记化不是这样。用正则表达式替换,这也很棒。谢谢。

也感谢你们在那里...

于 2012-09-21T09:08:27.443 回答
1

首先,我很确定你不是想拥有[^ ... ]. 这定义了一个“负字符类”,您当前的正则表达式说,“给我一个不是以下之一的单个字符: ”。很明显,您可能的意思是,. 现在,根据这个方便的网站,XPath 确实支持捕获组以及反向引用,所以请选择:A0123456789{}"AAA(\d{9})"

"AAA(\d{9})"

并提取$1第一个捕获组,或者:

"(?<=AAA)\d{9}"

并取整场比赛 ( $0)。

于 2012-09-20T07:44:04.803 回答
1

你可以试试这个:

A{3}(\d{9})

于 2012-09-20T08:02:52.010 回答