正确的正则表达式

时间:2016-04-08 16:02:03

标签: java regex

我正在使用Java Regex读取类型

的字符串
"{\n  'Step 1.supply.vendor1.quantity':\"80"\,\n
      'Step 2.supply.vendor2.quantity':\"120"\,\n
      'Step 3.supply.vendor3.quantity':\"480"\,\n
      'Step 4.supply.vendor4.quantity':\"60"\,\n}"

我必须检测

类型的字符串
'Step 2.supply.vendor2.quantity':\"120"\,\n.

我正在尝试使用正则表达式的模式和匹配器但是我无法找到像

这样的行的正确正则表达式
 <Beginning of Line><whitespace><whitespace><'Step><whitespace><Number><.><Any number & any type of characters><,\n><EOL>.

<Beginning of Line><EOL>我用于澄清目的。

我尝试了几种模式

String regex = "(\\n\\s{2})'Step\\s\\d.*,\n";
String regex = "\\s\\s'Step\\s\\d.*,\n";

我总是得到 IllegalStateException 找不到匹配项

我无法通过很好的例子找到适合阅读Java Regex的材料。任何帮助都会非常棒。感谢。

1 个答案:

答案 0 :(得分:0)

正如其他人在评论中所说,你应该使用JSON Parser。

但是如果你想看看它如何与正则表达式一起工作,那么你可以这样做:

  • 以您要捕获的行为例:Step 1.supply.vendor1.quantity':"80"
  • 将数字替换为\\d*\\d匹配任何数字)
  • \\.替换点(需要转义的点)
  • 在要捕获的部分周围添加一些括号

以下是生成的正则表达式:"Step (\\d*)\\.supply\\.vendor(\\d*)\\.quantity':\"(\\d*)\""

现在,使用RegexMatcher

String input = "{\n  'Step 1.supply.vendor1.quantity':\"80\"\\,\n";
Pattern pattern = Pattern.compile("Step (\\d*)\\.supply\\.vendor(\\d*)\\.quantity':\"(\\d*)\"");
Matcher matcher = pattern.matcher(input);
while(matcher.find()) {
  System.out.println(matcher.group(1));
  System.out.println(matcher.group(2));
  System.out.println(matcher.group(3));
}

输出:

1 //(corresponds to "Step (\\d*)")
1 //(corresponds to "vendor(\\d*)")
80 //(corresponds to "quantity':\"(\\d*)")