2017-02-21 5 views
1

Ich habe Code:Regex reguläre Ausdrücke Java String

private static final Pattern TAG_REGEX = Pattern.compile("<p>(.+?)</p>"); 
private static List<String> getTagValues(final String str) { 
    final List<String> tagValues = new ArrayList<String>(); 
    final Matcher matcher = TAG_REGEX.matcher(str); 
    while (matcher.find()) { 
     tagValues.add(matcher.group(1)); 
    } 
    return tagValues; 
} 
      System.out.println(Arrays.toString(getTagValues(stringText).toArray())); 

und ich von diesem erhalten wollen:

"<html><head></head><body><p>Aa , aa.</p><p><b>Aa aa, aa.</b></p><p>Aa aa aa, aa.</p><p><i>Aa, aa.</i></p><p><b><i>B, b, b.</i></b></p><b>Aa aa, aa.</b></body></html>" 

Ich möchte nur den Text beetwen <p> und </p>

i want get only this: 

"Aa aa Aa aa aa Aa aa aa aa Aa aa B b b" 

Aber ich weiß nicht, was ich in Pattern.compile(""); schreiben kann jemand helfen?

+0

dieses 'Aa aa, aa. 'kann zwischen'

'und'

' –

+0

' Jsoup' kann auch alle 'p' Tags Daten auswählen, aber wieder Ausgabe wird dies' Aa aa, aa. 'da ist nicht innerhalb' p' und irgendwo haben Sie auch 'b' Tag innerhalb' p' –

Antwort

0

Sie brauchen keine Muster noch Matcher für das, könnten Sie ein String ersetzen statt :

str.replaceAll(".*?(<p>.*</p>).*", " $1 ").replaceAll(".*?<p>(.*?)</p>.*?", " $1 ").replaceAll("<[/a-z]+>", " ").replaceAll("[,.]", " ").replaceAll(" +", " ")

Es nicht hübsch aussehen, aber es wird die ausgeführte Arbeit :)

+0

danke es ist hilfreich, aber ich füge einige Edit zu meinem Beitrag hinzu, weil outpus falsch war, ich brauche nicht Aa aa, aa. in meiner Ausgabe, damit Sie wissen, was ich Code bearbeiten muss, dass es funktioniert? – JavaCoder

+0

Ich habe meine Antwort aktualisiert, um mit der Bearbeitung auf Ihre Antwort auszurichten. Bitte stimmen Sie meine Antwort ab, wenn es für Sie funktioniert. Vielen Dank. – artemisian

+0

"\ $ 1" das gibt mir einen Fehler in Eclipse, 'Ungültige Escape-Sequenz (gültige sind \ b \ t \ n \ f \ r \" \ '\\) Dies ist Fehler – JavaCoder

2

Ich empfehle JSOUP Parser zu verwenden, um Ihre Daten aus HTML Code

1.) Analysieren Sie Ihre Daten als Document mit Jsoup.parse(string) Funktion zu extrahieren.

2.) Erhalten Sie die Daten von body als Element.

3.) Rufen Sie den Text Element mit dem Tag element.text() ab.

4.) Optional können Sie replaceAll("\\s*[,.]\\s*","") verwenden, um alle Befehle und Punkte zu entfernen und Leerzeichen zu formatieren.

String stringText = "<html><head></head><body><p>Aa , aa.</p><p><b>Aa aa, aa.</b></p><p>Aa aa aa, aa.</p><p><i>Aa, aa.</i></p><p><b><i>B, b, b.</i></b></p><b>Aa aa, aa.</b></body></html>"; 
    Document document =Jsoup.parse(stringText); 
    Element element=document.body(); 
    String plain_String = element.text().replaceAll("\\s*[,.]\\s*"," "); 
    System.out.println(element.text()); // Actual text 
    System.out.println(plain_String); // Formatted text 

Output:

Aa , aa. Aa aa, aa. Aa aa aa, aa. Aa, aa. B, b, b.Aa aa, aa. 
Aa aa Aa aa aa Aa aa aa aa Aa aa B b b Aa aa aa 

Download Jsoup hinzuzufügen als Abhängigkeit

\\s*[,.]\\s*: \\s* Spiel null oder mehr Räume

[,.]: jedes Zeichen innerhalb [] bedeuten ,.

erwähnt entsprechen

Wenn Sie darauf bestehen, die regex Lösung dann

verwenden

1.) Entfernen Sie zuerst alle unerwünschten Zeichen wie ,. und Räume mit replaceAll("\\s*[.,]\\s*", " ")

2.) Verwenden Sie regex <p[<>ib]*>([\\w\\s]+)<\\/[\\w]> mit Pattern und Matcher Ihren Text zu finden zwischen den Tags

3.Anfügen) Text der gefunden in StringBuilder und zeigt das Ergebnis

-Code

String str = "<html><head></head><body><p>Aa , aa.</p><p><b>Aa aa, aa.</b></p><p>Aa aa aa, aa.</p><p><i>Aa, aa.</i></p><p><b><i>B, b, b.</i></b></p><b>Aa aa, aa.</b></body></html>"; 
    Pattern pattern = Pattern.compile("<p[<>ib]*>([\\w\\s]+)<\\/[\\w]>"); 
    Matcher matcher = pattern.matcher(str.replaceAll("\\s*[.,]\\s*", " ")); 
    StringBuilder builder = new StringBuilder(); 
    while (matcher.find()) { 
     builder.append(matcher.group(1)); 
    } 
    System.out.println(builder); 

Ausgang:

Aa aa Aa aa aa Aa aa aa aa Aa aa B b b 
+0

nur für den Fall, wenn Sie alle 'p' Tags Daten wollen, verwenden Sie' document.getElementsByTag ("p"). Text () 'aber wieder resultierende Zeichenfolge enthält nicht Aa aa, aa. 'Text Daten, weil es nicht innerhalb' p' Tag ist –

+0

ja bearbeite ich meine Post, die ich diesen Text ohne Aa aa, aa. aber ich kann; t verwenden diese Jsuop, weil ich nur Datei in Java ohne jsoup schicken muss – JavaCoder

0

Sie können dies versuchen:

String str = "<html><head></head><body><p>Aa , aa.</p><p><b>Aa aa, aa.</b></p><p>Aa aa aa, aa.</p><p><i>Aa, aa.</i></p><p><b><i>B, b, b.</i></b></p><b>Aa aa, aa.</b></body></html>"; 
String start = ">", end = "<"; 
String regexString = Pattern.quote(start) + "(.*?)" + Pattern.quote(end); 
Pattern pattern = Pattern.compile(regexString); 
Matcher matcher = pattern.matcher(str.replaceAll("[.,]", "")); 
while (matcher.find()) { 
    if (!matcher.group(1).replaceAll("\\s{2,}", " ").trim().equals("")) { 
     System.out.print(matcher.group(1).replaceAll("\\s{2,}", " ") + " "); 
    } 
} 

Dies gibt Ihnen:

Aa aa Aa aa aa Aa aa aa aa Aa aa B b b Aa aa aa 
+0

danke es ist hilfreich, aber ich füge einige bearbeiten zu meinem Beitrag weil outpus war falsch, ich brauche nicht Aa aa, aa. in meiner Ausgabe, damit Sie wissen, was ich Sie Code bearbeiten muss, dass es wird funktionieren? – JavaCoder