我当前正在从“违反异常错误”消息中提取特定的字符串。我所做的步骤如下:
输入字符串格式: 键键
的条目值重复正则表达式当前正在使用:
Duplicate entry '(.*)' for key '(.*)'
获得的组1:值
值的格式==> 某些ID -所需值-一些ID
要提取所需的值,我目前使用(-)的第一个索引和最后一个索引,并按如下所示提取字符串:
error.substring(error.indexOf("-") + 1, error.lastIndexOf("-"));
只有正则表达式可以做到吗?
答案 0 :(得分:2)
我们可以使用String#replaceAll
以单线方式做到这一点:
String input = "some id-desired - d - d- value-some id";
String output = input.replaceAll("^.*?-(.*)-.*", "$1");
System.out.println(output);
输出:
desired - d - d- value
我谨慎使用的模式会消耗掉所有东西,直到第一个破折号为止。然后,它贪婪地消耗了第一个破折号和最后一个破折号之间的所有内容。样本数据很奇怪,但我想证明答案对于所需数据内出现的破折号是很可靠的。
答案 1 :(得分:0)
或多或少直接
var pattern = Pattern.compile("-.*-");
var matcher = pattern.matcher(string);
if (matcher.find())
result = matcher.group();
->查找第一个出现的-
,后跟尽可能多的字符,后跟一个-
。如果所需值中有-
,这也适用。
缺点是,破折号包含在结果中,但可以使用substring()
轻松将其删除。可以使用正向超前/向后看来避免这种情况:
...compile("(?<=-).*(?=-)");