使用匹配正则表达式查找子字符串

时间:2014-10-01 22:47:57

标签: java regex

使用正则表达式如何在其他字符串中查找子字符串。这是两个字符串:

String a= "?drug <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/possibleDiseaseTarget> ?disease .";

String b = "?drug <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/molecularWeightAverage> ?weight . ?drug <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/possibleDiseaseTarget> ?disease";

我想只匹配

<http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/possibleDiseaseTarget>

2 个答案:

答案 0 :(得分:0)

这里没有必要使用正则表达式,只需这样做:

String substr = "<http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/possibleDiseaseTarget>";
System.out.println(b.contains(substr)); // prints true
System.out.println(a.contains(substr)); // prints true

答案 1 :(得分:0)

由于这不是HTML,任何XML / HTML解析器无法帮助您,您可以尝试使用regex。您似乎想要找到表格中的文字

?drug <someData> ?disease

要描述这样的文本正则表达式,您需要转义?(它是代表 optional 的正则表达式特殊字符之一 - 零或一次 - 量词)所以你需要放置它之前的\(在String中需要写成"\\") 部分<someData>也可以写成<[^>]>,这意味着,

  • <
  • 一个或多个非>之后,
  • ,最后是>

匹配?drug <someData> ?disease的正则表达式可以写成

"\\?drug <[^>]+> \\?disease"

但由于我们只对代表<[^>]+>的{​​{1}}部分感兴趣,因此我们需要让正则表达式group成立。简而言之,如果我们用括号括起正则表达式的某些部分,那么这个正则表达式部分匹配的字符串将放在我们称为group的内容中,因此我们将能够从该组中获得一部分。总之,最终的正则表达式看起来像

<someData>

可以像

一样使用
"\\?drug (<[^>]+>) \\?disease"
         ^^^^^^^^^---first group, 

将产生输出

String a = "?drug <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/possibleDiseaseTarget> ?disease .";
String b = "?drug <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/molecularWeightAverage> ?weight . ?drug <http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/possibleDiseaseTarget> ?disease";

Pattern p = Pattern.compile("\\?drug (<[^>]+>) \\?disease");
Matcher m = p.matcher(a);
while (m.find()) {
    System.out.println(m.group(1));
}
System.out.println("-----------");
m = p.matcher(b);
while (m.find()) {
    System.out.println(m.group(1));
}