2016-05-18 23 views
1

Ich erwarte nur den übereinstimmenden Teil einer Zeile zu erhalten. mein Ausdruck wie folgt aussieht:Regex passt nur Teil in Übereinstimmungen

std::wstring strPatternDat = L"DECL\\s+E6POS\\s+X[A-Za-z0-9]+=\\{X\\s-?[1-9]\\d*(\\.\\d+)+,Y\\s-?-?[1-9]\\d*(\\.\\d+)+,Z\\s-?-?[1-9]\\d*(\\.\\d+)+,A\\s-?-?[1-9]\\d*(\\.\\d+)+,B\\s-?-?[1-9]\\d*(\\.\\d+)+,C\\s-?-?[1-9]\\d*(\\.\\d+)" 

Linie Ich suche auf:

DECL E6POS XB1={X 152.115494,Y -1553.65002,Z 1255.94604,A 162.798798,B -3.58411908,C -176.614395,S 6,T 50,E1 -4949.979,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} 

Finding Spiel wie:

if (regex_match(line, matchesDat, expressionDat)) 
    { 
     TRACE("Match found"); 
    } 

In den angepassten Daten matchesDat i voll abgestimmte Linie bin immer. Aber ich erwarte nur das angepasste Teil

Anfahrt:

DECL E6POS XB1={X 152.115494,Y -1553.65002,Z 1255.94604,A 162.798798,B -3.58411908,C -176.614395,S 6,T 50,E1 -4949.979,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0} 

Erwartet:

DECL E6POS XB1={X 152.115494,Y -1553.65002,Z 1255.94604,A 162.798798,B -3.58411908,C -176.614395, 

Wie kann ich nur angepasst Teil erhalten nicht die volle Linie?

+0

Verwenden Sie regex_search. –

Antwort

1

Sie müssen regex_search verwenden und dann den angepassten Wert als das Ergebnis zu bekommen, nicht die gesamte Zeichenfolge:

std::wstring expressionDat = L"DECL\\s+E6POS\\s+X[A-Za-z0-9]+=\\{X\\s-?[1-9]\\d*(\\.\\d+)+,Y\\s-?-?[1-9]\\d*(\\.\\d+)+,Z\\s-?-?[1-9]\\d*(\\.\\d+)+,A\\s-?-?[1-9]\\d*(\\.\\d+)+,B\\s-?-?[1-9]\\d*(\\.\\d+)+,C\\s-?-?[1-9]\\d*(\\.\\d+)"; 
std::wstring line(L"DECL E6POS XB1={X 152.115494,Y -1553.65002,Z 1255.94604,A 162.798798,B -3.58411908,C -176.614395,S 6,T 50,E1 -4949.979,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}"); 
wsmatch matchesDat; 
if (std::regex_search(line, matchesDat, wregex(expressionDat))) 
{ 
    std::wcout << L"Match found: " + matchesDat.str() << "\nSuffix: " << matchesDat.suffix().str(); 
} 

enter image description here

Der matchesDat.suffix() ausgeben wird der Rest der Zeichenfolge nach dem Spiel.

+0

Die MatchesDat enthält alle übereinstimmenden Teile, die ich bekommen habe. Dieses Spiel hat die erste und zweite in MatchesDat [0]. der erste ist der übereinstimmende Teil und der zweite ist der nicht übereinstimmende Teil. Ich brauche den nicht passenden Teil in meinem Fall. Wie kann ich es als Wstring bekommen? –

+0

Meinst du, du brauchst ', S 6, T 50, E1 -4949.979, E2 0.0, E3 0.0, E4 0.0, E5 0.0, E6 0.0}'? Verwenden Sie 'regex_replace', und ersetzen Sie sie durch eine leere Zeichenfolge. Das hört sich jedoch nach einer neuen Frage an. –

+0

Ja, es ist wie eine neue Frage. einverstanden. in debug kann ich die ", S 6, T 50, E1 -4949.979, E2 0.0, E3 0.0, E4 0.0, E5 0.0, E6 0.0}" in MatchesDat [0]. Sekunde. Kann aber nicht als Wstring verwendet werden. Bitte vorschlagen. Ihre Antwort ist vollkommen in Ordnung. Nur ich bin mir nicht sicher, wie ich den zweiten Wert bekommen kann. –