2010-12-23 17 views
3

ich die folgenden möglichen Strings haben:RegexMuster Hilfe

12_3

oder

12_3 + 14_1 + 16_3-400_2

Die Zahlen anders sein könnte, aber was ich bin Auf der Suche nach sind die X_X numerischen Muster. Ich muss jedoch eine Ersetzung durchführen, die nach 2_3 sucht und die 12_3 NICHT als gültige Übereinstimmung zurückgibt.

Die +/- sind arithmetische Symbole und können einen beliebigen gültigen Wert haben. Sie benötigten auch ARENT (im Beispiel des ersten) .. also könnte ich eine Zeichenfolge überprüfen wollen, die nur 12_3 hat, und wenn ich in 2_3 übergebe, würde es keine Übereinstimmung zurückgeben. Nur wenn ich 12_3 bestanden habe.

Dies ist für ein C# -Skript.

Vielen Dank für jede Hilfe !! Ich bin regex dumm.

+2

Ich verstehe nicht die Fülle von "Fragen", die nichts anderes als Anfragen für uns sind, Ihre Arbeit für Sie zu tun.Es gibt eine große Anzahl von Möglichkeiten, Reguläre Ausdrücke aus dem Lesen großer Bücher wie Reguläre Ausdrücke oder Software wie RegEx Buddy zu lernen. Wie auch immer, es gibt keine Entschuldigung dafür, eine Regular Expressions-Frage zu stellen, ohne irgendwelche Ausdrücke zu zeigen, die Sie zuvor versucht haben. –

+0

@ Frazell - das ist die fünfte Frage von diesem Benutzer und seine/ihre erste Regex-Frage. Wenn Sie denken, dass es ein allgemeines Problem gibt, starten Sie bitte eine Frage auf [meta] (http://meta.stackoverflow.com/), aber es ist im Grunde Lärm hier. – Kobi

Antwort

2

Ok, wir haben, das heißt: 2_3 + 12_3 + 14_1 + 16_3-400_2 + 2_3

regexp # 1:

Regex r1 = new Regex(@"\d+(\d_\d)"); 
MatchCollection mc = r1.Matches(sourcestring); 

Daten gefunden:

[0] [0 ] = 12_3 [0] [1] = 2_3

[1] [0] = 14_1 [1] [1] = 4_1

[2] [0] = 16_3 [2] [1] = 6_3

[3] [0] = 400_2 [3] [1] = 0_2

regexp # 2:

Regex r2 = new Regex(@"\d+\d_\d"); 
MatchCollection mc = r2.Matches(sourcestring); 

Daten gefunden:

[0] [0] = 12_3

[1] [0] = 14_1

[2] [0] = 16_3

[3] [0] = 400_2

Ist hier das, was Sie gesucht haben?

+0

Danke dafür! Ich hatte ein ähnliches Muster wie das zweite, aber ich konnte nicht herausfinden, ob ich mehrere Muster basierend auf der Zahl auf der linken und rechten Seite des _ machen musste. Sehr hilfreich! – dpluscc

2

\b\d+_\d+\b.

\d ist Ziffer und \b ist eine Null-Wortgrenze. Siehe hierzu C# regex cheat sheet.

UPDATE: Ich sah nur für ein „C# regex Spickzettel“, um sicherzustellen, dass \b eine Wortgrenze war (es ist \< und \> in grep). Das war das erste Ergebnis. Ich habe den Text nicht wirklich verifiziert. Wie auch immer, ich verlinke jetzt auf einen anderen Spickzettel.

+0

Siehe, ich weiß, welche Zahlen ich suche .. Also, zum Beispiel, ich weiß in meiner Zeichenfolge werde ich nach 2_3 suchen. Also, wenn ich das Muster \ b2_3 verwende, findet es die richtige "2_3" in die Saite 12_3 + 2_3 + 122_3 .. Ich verstehe nicht wirklich warum ?! :) – dpluscc

+0

"Übereinstimmungen an der Position zwischen einem Wort Zeichen" .. Ich vermute, es sieht 12_3 als ein Wort, und das + als Trennzeichen? – dpluscc

+2

Schummeln Sie diesen Spickzettel nicht. '\ b' stimmt mit einer Position überein, der entweder ein Wortzeichen folgt und keinem vorangestellt ist (Beginn eines Wortes), oder einem Wortzeichen vorangestellt ist, gefolgt von einem Wortende (Ende des Worts). Das andere Zeichen (falls vorhanden) kann Leerzeichen, Interpunktionszeichen oder ein beliebiges Zeichen sein, das kein "Wortzeichen" ist (d. H. Ein Buchstabe oder eine Ziffer oder ein Verbindungszeichen wie der Unterstrich). '\ b2_3' stimmt nicht mit' 12_3' überein, da das '\ b' zwischen den beiden Wortzeichen' 1' und '2' passen müsste. –