我这里有一个字符串,This is a string: AAA123456789
。
所以这里的想法是使用正则表达式提取字符串AAA123456789
。
我将其与X-Path合并。
注意:如果有帖子,请引导我。
我认为,正确的,我应该substring(myNode, [^AAA\d+{9}])
,
我不确定那个正则表达式部分。
这个想法是在遇到“AAA”时提取字符串,只有数字,但只有9个后续数字。
答案 0 :(得分:9)
纯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'
)
答案 1 :(得分:4)
好的,在引用了精彩人士的答案和评论之后,我用我选择的这个解决方案总结了我的发现。到此为止,
concat("AAA", substring(substring-after(., "AAA"), 1, 9))
。
所以我首先,在字符串之后的子串 - 以“AAA”作为第一个参数,长度为1到9 ...更多,被忽略。然后,因为我使用AAA作为参考,所以不会出现,因此,将AAA连接到值的前面。所以这意味着我将获得AAA之后的前9位数字,然后在静态数据之前将AAA连接在前面。
无论有什么其他贡献,这都可以使数据正确无误。
但我喜欢@Dimitre的正则表达式。更换部件。如果没有空格作为参数,那么令牌化不是那样的。用正则表达式代替,这也很精彩。感谢。
还要感谢你们那些人......
答案 2 :(得分:1)
首先,我很确定你不是要拥有[^ ... ]
。这定义了一个“负面字符类”,即你当前的正则表达式说,“给我一个字符 不以下之一: A0123456789{}
”。明确地,你可能意味着"AAA(\d{9})"
。现在,根据this handy website,XPath确实支持捕获组以及反向引用,所以请选择:
"AAA(\d{9})"
提取$1
,第一个捕获组,或:
"(?<=AAA)\d{9}"
并进行整场比赛($0
)。
答案 3 :(得分:0)
你可以试试这个:
A {3}(\ d {9})