1

我是新手regex。我正在寻找与以下模式匹配的正则表达式并提取字符串,

 key1=test1
 key2="test1" // which will extract test1 stripping quotes
 key3=New test
 key4=New" "test // which will extract New" "test - as it is if the quotes come in between

我尝试使用\\s*(\\S+)\\s*=\\s*(\\S+*+),但不确定如何包含引号(如果存在)。任何帮助将不胜感激。

4

4 回答 4

2

一个简单的解决方案是将其加载为Properties,这将完全执行您正在寻找的解析。否则,只需读取每一行并在第一个“=”处拆分字符串。

于 2013-02-01T13:16:34.697 回答
2

这是一个没有正则表达式的解决方案,以避免嵌套引号问题:

String extractValue(String input) {
  // check if '=' is present here...
  String[] pair = input.split("=", 2);
  String value = pair[1];
  if (value.startsWith("\"") && value.endsWith("\"")) {
      return value.substring(1, value.length() - 1);
  }
  return value;
}

基本上这不是没有正则表达式,因为使用了split(),但它没有按照您计划使用它的方式使用正则表达式。

于 2013-02-01T13:19:45.393 回答
0

您可以使用^([^=]+)=("([^"]*)"|([^"].*))$,但答案将显示在第三组或第四组中,具体取决于值是否被引用,因此您需要同时检查两者并拉取不为空的值。

于 2013-02-01T13:23:41.780 回答
0

对于正则表达式,如果您想包含"在您的正则表达式中,只需使用\\". 无论您要达到什么目标,首先在http://www.regexpal.com/上直接测试

于 2013-02-01T13:25:17.287 回答