2014-10-01 2 views
-6

Использование регулярного выражения, как найти подстроку в другой строке. Вот две строки:find substring using match 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>

+0

Почему вы конкретно нужно регулярное выражение, когда 'contains' существует? – Dici

+0

он вообще не работает :( –

+0

Можем ли мы увидеть, что [вы сделали до сих пор, чтобы решить эту проблему] (http://mattgemmell.com/what-have-you-tried/)? – Pshemo

ответ

0

Поскольку это не довольно HTML и любой синтаксический анализатор XML/HTML не могли помочь вам с regex. Кажется, что вы хотите, чтобы найти текст в виде

?drug <someData> ?disease 

Для описания такого текста регулярного выражения вам нужно, чтобы избежать ? (это один из регулярных выражений специальных символов, представляющих optional - ноль или один раз - квантор), так что вам нужно место \ перед этим (которое в String должно быть записано как "\\").
Кроме того, часть <someData> можно записать в виде, как <[^>]>, что означает,

  • <,
  • один или более не > после него,
  • и, наконец, >

Так регулярное выражение, чтобы соответствовать ?drug <someData> ?disease может быть записано как

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

Но так как мы заинтересованы только в части <[^>]+> представляя <someData> мы должны позволить регулярное выражение group основано бороться. Короче, если мы окружим некоторую часть регулярного выражения круглыми скобками, то строка, подобранная этой частью регулярного выражения, будет помещена во что-то, что мы называем группой, поэтому мы сможем получить часть из этой группы. В коротком заключительном регулярное выражение может выглядеть

"\\?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)); 
} 

, который будет производить в качестве выходного

<http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/possibleDiseaseTarget> 
----------- 
<http://www4.wiwiss.fu-berlin.de/drugbank/resource/drugbank/possibleDiseaseTarget> 
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 
+0

это не полная строка, а часть «a». Я хочу, чтобы она соответствовала полной строке или некоторой части строки «a». Однако я решил проблему, взяв подстроку (начало , конец) «а», и он соответствует теперь. –