2016-12-12 32 views
2

Start- und End-Index von Strings zu finden sagen, Sie sind eine Eingabezeichenfolge gegebeneRegulärer Ausdruck

text = '8.*x.^21+x'; 

Ich versuche, den Start- und Zielindizes der Kräfte auf den x-Variablen,

zu extrahieren

start und m_end werden jeweils die Werte [4 7 10] und [4 8 10] angegeben, dies führt jedoch zu einem Fehler, da die Werte von start und m_end nur [7 10] und [8 10] sein sollten. .
Mein regulärer Ausdruck ist das Ergreifen des ersten x, das eine Macht sowie seine Macht hat, aber es sollte nicht sein. Irgendwelche Gedanken darüber, wie das zu beheben ist?

Antwort

2

Das Muster, das Sie haben, hat eine Alternierung für jedes 'x' Zeichen: |x. Wenn Sie nur die ‚x‘ nicht gefolgt von einer Potenzierung mögen, können Sie eine negative vorwärtsgerichtete Behauptung hinzu:

((?<=x\.\^)\d+)|(x(?!\.\^)) 

Beachten Sie auch die Änderung *-+ quantifier auf den \d Zeichenklassen-Bezeichner. Dies kann erforderlich sein, andernfalls entspricht es einer leeren Zeichenfolge.

+0

Dies wird die 2 in der Zeichenkette erfassen, wodurch start = [7] und m_end = [8]; Aber es wird auch nicht das x aufnehmen (was start = [7 9] und m_end = [8 9] machen würde. Wäre es besser, zwei reguläre Ausdrücke auszuführen? –

+0

Wenn ich es ausführe, passt es sowohl zu 2 als auch zu Die 1, aufgrund der \ d + ist gierig. Wenn man auf die [docs] (http://www.mathworks.com/help/matlab/ref/regexp.html) schaut, scheint es, dass die erste Ausgabe - "start" - enthält alle benötigten Informationen, und zusätzliche Ausgaben enthalten nur teilweise Übereinstimmungen, daher wird [8 9] als Teilübereinstimmung erwartet – codekaizen

+0

Warten Sie, ich glaube, ich habe es nicht verstanden ... Sie wollen das 'x' enthalten seine Macht? – codekaizen