2009-05-05 7 views
2

Ich habe Textdatei mit einer Zeile wie folgt aus:Wie verwende ich Regex, um Nicht-Wort-Zeichen in einer bestimmten Zeichenfolge zu ersetzen?

SendersTimeSeriesIdentification: COMPANY_A/COMPANY_B/REF_7/20090505 

Ich mag würde alle nicht-Wort Zeichen im Wert Teil mit dem Charakter n, wie diese ersetzen:

SendersTimeSeriesIdentification: COMPANYnAnCOMPANYnBnREFn7n20090505 

Aber Überall in der Datei gibt es ähnliche Zeichenfolgen, die intakt bleiben müssen. Ein Beispiel dafür ist:

MessageIdentification: REF_7/VER_1/20090505 

Ich glaube, ich muss Lookbehind, und ich kam zu diesem Versuch (VB.NET):

Regex.Replace(fileContentString, "(?<=SendersTimeSeriesIdentification:)(\W)", "0") 

Das funktioniert nicht, wie Ich mag würde es. Also meine Fragen sind:
Ist es möglich, alle Nicht-Wort-Zeichen in einer bestimmten Zeichenfolge mit nur einem Regex.Replace-Aufruf zu ersetzen? Wie?

Antwort

2

Versuchen Sie dieses:

Regex.Replace(fileContentString, "(?<=SendersTimeSeriesIdentification:\s.*)[_\W]", "0") 

Dies ersetzt alle \ W und _ Zeichen mit "0" nach "SendersTimeSeriesIdentification:".

+0

Ich werde diese Lösung verwenden, nur weil es in meiner Situation einfacher ist. Ich denke, das würde nicht funktionieren, wenn die Zeile am Ende einen Kommentar hätte (// ein Kommentar), weil die beiden Schrägstriche ersetzt würden, obwohl sie nicht hätten sein sollen. – SinkovecJ

2

Anstatt als eine einzige Regex ersetzen, würde ich die Datei in Zeilen aufteilen, dann nur Zeilen verarbeiten, die mit "SendersTimeSeriesIdentification:" beginnen. So ist der Regex-Ersatz einfach und schön.

+0

Kamareys Antwort ist richtig, aber ich würde diesen Ansatz wählen, wenn ich könnte. –

+0

@Alan M: Ich stimme zu. Das "wenn ich könnte" ist hier der Schlüssel. :-) – SinkovecJ