2016-04-25 5 views
1

Ich bin mir nicht sicher, was ich falsch mache. Ich habe folgende:C# Regex zum Extrahieren nach Capture-Gruppen-Nummern nur

(?:[A-Z]{2}\d{2}\s) 

Dies liegt daran, mein String immer mit zwei oberem Alpha-Zeichen und zwei numerischen beginnt. Danach habe ich Daten, die mit Worten gemischt wird, und ich möchte nur die Zahlen, die ich diese diesen AB12 (1,2,3 words, 4,5,6,7,8,9) und erhalten nehmen will AB12 (1,2,3,4,5,6,7,8,9)

Ich versuche

(?:[A-Z]{2}\d{2}\s)([0-9]+) 

jedoch ist dies nicht funktioniert. War ich meinem Ziel noch näher gekommen?

+0

Die Frage ist unklar. Was sind die Anforderungen? Im Moment kann ich nur ein sehr hässliches ['([AZ] {2} \ d {2} \ s \() vorschlagen (?: \ S *,? \ S * (?: (\ D +) \ b | \ w +)) * \) '] (http://regexstorm.net/tester?p= (% 5bA-Z% 5d% 7b2% 7d% 5cd% 7b2% 7d% 5cs% 5c() (% 3f% 3a % 5cs *% 2c% 3f% 5cs * (% 3f% 3a (% 5cd% 2b)% 5cb% 7c% 5cw% 2b)) *% 5c) & i = AB12 + (1% 2c2% 2c3 + Wörter% 2c + 4 % 2c5% 2c6% 2c7% 2c8% 2c9)). –

+0

Ich muss nicht-numerische aus den Klammern entfernen. – JeremyA1

Antwort

1

jedes Zeichen zu entfernen, das keine Ziffer und ein Komma ist, können Sie die [^,\d\s] Zeichenklasse verwenden und (?<=\([^()]*) und (?=[^()]*\)) lookarounds verwenden, um die Position in Klammern zu behaupten:

(?<=\([^()]*)\s*[^,\d]+(?=[^()]*\)) 

Siehe regex demo

Die \s* hilft, optionale (0+) Leerzeichen vor nicht numerischen Werten loszuwerden.

Wenn Sie precise müssen den Kontext mit Ihrer ersten Unter-Pattern, fügen Sie es:

(?<=^[A-Z]{2}\d{2}\s+\([^()]*)\s*[^,\d]+(?=[^()]*\)) 
    ^^^^^^^^^^^^^^^^^ 

A C# demo:

using System; 
using System.IO; 
using System.Text.RegularExpressions; 

public class Test 
{ 
    public static void Main() 
    { 
     var str = "AB12 (1,2,3 words, 4,5,6,7,8,9)"; 
     var pat = @"(?<=^[A-Z]{2}\d{2}\s+\([^()]*)\s*[^,\d]+(?=[^()]*\))"; 
     var res = Regex.Replace(str, pat, string.Empty); 
     Console.WriteLine(res); 
    } 
} 
+1

Danke das war genau was ich brauchte. Das hätte ich nie herausgefunden. – JeremyA1

+0

Beachten Sie, dass Sie es weiterhin so anpassen können, dass nur Wörter ohne Ziffern entfernt werden und diese mit Ziffern beibehalten werden: ['(? <= \ ([^()] *) \ S * \ b [^, \ W \ d] + \ b (? = [^()] * \)) '] (http://regexstorm.net/tester?p= (% 3f% 3c% 3d% 5c (% 5b% 5e()% 5d *)% 5c *% 5cb% 5c% 5e% 2c% 5cW% 5cd% 5d% 2b% 5cb (% 3f% 3d% 5b% 5e()% 5d *% 5c)) & i = AB12 + (1% 2c2% 2c3 + worolds + Wörter% 2c + 4% 2c5% 2c6% 2c7% 2c8% 2c9)). –

Verwandte Themen