正则表达式 - 从给定字符串中提取子字符串

时间:2012-09-20 06:52:30

标签: regex xpath substring

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

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

我将其与X-Path合并。

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

我认为,正确的,我应该substring(myNode, [^AAA\d+{9}])

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

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

4 个答案:

答案 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})