2

我正在尝试使用 Java 中的正则表达式读取一行并解析一个值。包含该值的行看起来像这样,

...... TESTYY912345 .......
...... TESTXX967890 ........

基本上,它包含 4 个字母,然后是任意两个 ASCII 值,然后是数字 9,然后是(任意)数字。而且,我想得到值,912345 和 967890。

这就是我目前在正则表达式中所拥有的,

... 测试[\x00-\xff]{2}[9]{1} ...

但是,这会跳过 9 并解析 12345 和 67890。(我也想包括 9)。

谢谢你的帮助。

4

2 回答 2

2

你很接近。(9\\d*)匹配后捕获整个组TEST\\p{ASCII}{2}。这样,您将捕获9和以下数字:

String s  = "...... TESTYY912345 ......";
Pattern p = Pattern.compile("TEST\\p{ASCII}{2}(9\\d+)");
Matcher m = p.matcher(s);
if (m.find()) {
  System.out.println(m.group(1)); // 912345
}
于 2012-09-12T22:12:22.790 回答
2

请参阅我的评论以获取工作表达式,"TEST.{2}(9\\d*)".

final Pattern pattern = Pattern.compile("TEST.{2}(9\\d*)");
for (final String str : Arrays.asList("...... TESTYY912345 .......",
         "...... TESTXX967890 ........")) {
  final Matcher matcher = pattern.matcher(str);
  if (matcher.find()) {
    final int value = Integer.valueOf(matcher.group(1));
    System.out.println(value);
  }
}

在ideone上查看结果:

912345

967890

这将匹配您的示例中的任何两个字符(终止符除外) ,XX并且YY将在.9

于 2012-09-12T22:14:54.827 回答