正则表达式从响应中获取特定字符串[关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式从响应中获取特定字符串[关闭]相关的知识,希望对你有一定的参考价值。

我有如下的回复

<adm:TargetCode key="urn:comcast:altcon:activityState">INACTIVE</adm:TargetCode>

  <adm:TargetCode key="urn:comcast:altcon:activityState">ACTIVE</adm:TargetCode>

从这个使用正则表达式我怎么能得到字符串INACTIVEACTIVE字符串。

我可以使用split方法,但它包含大量代码。为了减少代码,我更喜欢用户正则表达式。但我怎样才能继续使用正则表达式?

答案

使用正则表达式,您可以使用:

Pattern p1 = Pattern.compile(">(.*)<");
Matcher m1 = p1.matcher("<adm:TargetCode key="urn:comcast:altcon:activityState">INACTIVE</adm:TargetCode>");
while (m1.find()) {
    System.out.println(m1.group(1));
}

哪个输出:

INACTIVE

可以找到正则表达式的解释here


使用字符串可以通过以下方式实现:

String input = "<adm:TargetCode key="urn:comcast:altcon:activityState">INACTIVE</adm:TargetCode>";
input = input.substring(input.indexOf(">") + 1, input.lastIndexOf("<"));
另一答案

您要解析的内容看起来像html,您应该更喜欢使用html解析器而不是正则表达式。

您可以使用JSoup轻松解析数据,如下所示:

String s = "<adm:TargetCode key="urn:comcast:altcon:activityState">INACTIVE</adm:TargetCode>
" + 
        "<adm:TargetCode key="urn:comcast:altcon:activityState">ACTIVE</adm:TargetCode>";
Document doc = Jsoup.parse(s);
for (Element element : doc.getElementsByTag("adm:TargetCode")) {
    System.out.println(element.text());
}

打印,

INACTIVE
ACTIVE

虽然有时候,可以使用正则表达式,以防您尝试解析的数据中没有嵌套结构。对于这种情况,你可以使用这个正则表达式,

(?<=>)[^><
]+(?=<)

在这里,(?<=>) positive look behind确保匹配的文本前面有>(?=<)正向前看确保文本匹配后跟<,而这个字符集[^>< ]+捕获除> < 之外的任何字符一次或多次。

Regex Demo

Java代码,

String s = "<adm:TargetCode key="urn:comcast:altcon:activityState">INACTIVE</adm:TargetCode>
<adm:TargetCode key="urn:comcast:altcon:activityState">ACTIVE</adm:TargetCode>";
Pattern p = Pattern.compile("(?<=>)[^><\n]+(?=<)");
Matcher m = p.matcher(s);
while (m.find()) {
    System.out.println(m.group());
}

打印标签中的值,

INACTIVE
ACTIVE

此外,其他答案的问题是,它在.*中使用>(.*)<,因此,在匹配>之后,它贪婪地匹配任何字符,包括<或任何出现在它中间的任何字符,只要它能在某处找到一个<(最后出现在那里)并给出意想不到的匹配。要解决这个问题,它应该使用非贪婪的版本.*?而不是.*,但更好的是使用否定的字符类[^>

以上是关于正则表达式从响应中获取特定字符串[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

从字符串中获取电子邮件 - 正则表达式语法 + preg_match_all [关闭]

除非被特定标签包围,否则替换字符

我需要使用正则表达式从以下阶段获取金额值[关闭]

从字符串正则表达式 PHP 中提取数值 [关闭]

如何使用正则表达式获取特定字符之后的所有字符,例如逗号 (",")