2017-12-11 5 views
0

Ich möchte richtige Regex finden, um Wert von XML-Tag zu erhalten und ersetzen Sie es mit X. Dieses Tag:Finden Sie die richtige Regex für XML-Tag-Wert - Java

<number>1234I0000ABC0001</number> 

I creted Regex wie folgt aus:

.*number>([A-Z0-9 _]*[A-Z0-9][A-Z0-9 _]*)</ 

aber es wird nicht als weel arbeiten, wie ich will. Ich möchte den Wert von Regex erhalten, alle Zeichen durch X ersetzen und diesen geänderten Wert in Tag setzen.

+0

Verwenden Sie zum Analysieren von XML keine regulären Ausdrücke - verwenden Sie stattdessen einen XML-Parser. Java bietet umfangreiche Unterstützung für das Parsen von XML in der Standardbibliothek. – Jesper

+0

Ich weiß, aber es erfordert große Xml in DOC zu analysieren, was keine gute Lösung für mich ist. Es braucht zu viel Zeit. – allocer

+1

überprüfen Sie bitte, ob der folgende Link hilft Ihnen https://StackOverflow.com/Questions/13241615/Find-Everything-between-Two-XML-Tags-with-regex – PraveenM

Antwort

1

Es ist keine gute Idee, XML mit Regex zu analysieren. Aber wenn Sie darauf bestehen, dann können Sie

<number>([\s\S]*?)<\/number>

verwenden diese den Wert als Group 1 erfassen. Sie können das einfach durch was auch immer Sie mögen ersetzen. Für eine detaillierte Erläuterung können Sie diese regex101 in Live-Action besuchen

+0

Jede Lösung, die reguläre Ausdrücke verwendet, enthält Fehler. Diese Lösung wird Ihnen zum Beispiel falsche Übereinstimmungen bei auskommentierten '' Elementen geben, und es wird nicht mit gültigen '' Elementen übereinstimmen, die Leerzeichen oder Namespace-Deklarationen im Start-Tag oder Kommentare im Wert enthalten, und es wird vollständig fehlschlagen wenn Ihr XML-Dokument externe Entitäten oder Zeichenreferenzen verwendet. Benutzer werden Ihnen nicht danken (und werden StackOverflow mit Fragen überfluten), wenn sie Ihnen gültige Dokumente senden, die Sie falsch behandeln. Wir haben es satt, weshalb wir Ihnen raten, es nicht zu tun. –

+0

Ja, Ihre Erklärung ist sehr richtig und legitim. Daher habe ich in der ersten Zeile davor gewarnt. Aber da @allocer die Frage gestellt hat, etwas mit * Regex * zu spezifizieren, denke ich, wird es ihm nur einen Weg zeigen und er wird auch die Fallstricke kennen. Am Ende des Tages könnte er wissen, was ihm am meisten steht. –

+0

Entschuldigung, meine Kommentare waren natürlich in erster Linie an das OP gerichtet, nicht an dich (@ShafinMahmud) –

1

Sie an so etwas wie this aussehen könnte:

(<.+>)(.+)(</.+>) 

oder

<number>(.+?)</number> 

muss ich beachten Sie, dass es nicht wirklich eine Zahl ist, :-)

Es wird Gruppe sein (1)