2017-05-11 2 views
-1

Ich muss eine Menge Textdateien analysieren, wobei jede Textdatei ein oder mehrere XML-Dokumente enthält. Ich weiß, dass jedes XML in einem Envelope-Tag als Root-Tag eingeschlossen ist, aber sie haben unterschiedliche Namespaces. Ich habe versucht, einen regulären Ausdruck zu erstellen, um diese XML-Dokumente aus einer Textdatei zu holen, und es funktioniert für die meisten von ihnen, aber für einige bekomme ich eine katastrophale Backtracking-Fehler. Ich denke es liegt daran, dass der Text zu groß ist und mein Ausdruck nicht sehr effizient ist. Ich bin nicht wirklich gut in Regex, also kämpfe ich darum, das zu beheben.Suchen von Text zwischen zwei Tags mit Variablen-Namespace

Das Muster i gesucht habe, ist: <namespace:envelope attributes>XML</namespace:envelope>

Was habe ich mit so weit kommen ist: (?i)<[^:]*?:envelope[^>]*?>.*?<\/[^:]*?:envelope>

Jede Hilfe wäre sehr geschätzt.

+0

http://stackoverflow.com/questions/8577060/why-is-it-such-a-bad-idea-to-parse-xml-with-regex –

Antwort

-1

Versuchen Sie, diese für reguläre Ausdrücke zu verwenden:

#<([^/].*?):envelope\s.+?</\1:envelope>#s

RegEx101 Demo 1

oder kürzer ein, wenn Sie brauchen, um Namensraum nicht getrennt:

#<([^/].*?:envelope)\s.+?</\1>#s

RegEx101 Demo 2

+0

\ 1 wird nicht in jeder Sprache funktionieren. Es wird auch keinen einfachen Umschlag ohne Attribute wie ' content' –

+0

@ stej4n, ich weiß nicht, welche Sprache mit topicstarter, habe ich gerade eine funktionierende Lösung für seine gepostet Antwort: 'Das gesuchte Muster ist: XML' –

+0

Ich weiß und es gibt keinen universellen Regex dafür, besonders wenn ich mit JavaScript arbeite. Die Sprache sollte als Antwort erwähnt werden. Ihre Antwort ist gültig mit PCRE und Python, deshalb wurde sie nicht downvolotiert;) –

Verwandte Themen