我这里有一个字符串,This is a string: AAA123456789
.
所以这里的想法是AAA123456789
使用正则表达式提取字符串。
我将它与 X-Path 结合起来。
注意:如果有这个帖子,请引导我。
我认为,按道理,我应该substring(myNode, [^AAA\d+{9}])
,
我不太确定正则表达式部分。
这个想法是在遇到“AAA”并且只有数字但只有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'
)
好的,在这里参考了很棒的人的答案和评论后,我用我选择的这个解决方案总结了我的发现。开始,
concat("AAA", substring(substring-after(., "AAA"), 1, 9))
.
所以我首先,以“AAA”作为第一个参数的字符串之后的子字符串,长度为 1 到 9 ......任何更多,被忽略。然后由于我使用 AAA 作为参考,因此不会出现,因此将 AAA 连接到值的前面。所以这意味着我将在 AAA 之后获得第一个 9 位,然后在前面连接 AAA,因为它是静态数据。
无论有什么其他贡献,这将允许数据正确。
但我喜欢@Dimitre 的正则表达式。替换部分。如果没有空间作为参数,则标记化不是这样。用正则表达式替换,这也很棒。谢谢。
也感谢你们在那里...
首先,我很确定你不是想拥有[^ ... ]
. 这定义了一个“负字符类”,即您当前的正则表达式说,“给我一个不是以下之一的单个字符: ”。很明显,您可能的意思是,. 现在,根据这个方便的网站,XPath 确实支持捕获组以及反向引用,所以请选择:A0123456789{}
"AAA(\d{9})"
"AAA(\d{9})"
并提取$1
第一个捕获组,或者:
"(?<=AAA)\d{9}"
并取整场比赛 ( $0
)。
你可以试试这个:
A{3}(\d{9})