PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Regulärer Ausdruck


Monger
2007-12-03, 13:38:44
Hallo,

ich hab jetzt schon ne Weile rumgebastelt, stelle mich aber derzeit an wie der Hahn zum Eier legen...

Kann mir jemand einen regulären Ausdruck mit folgenden Merkmalen basteln?

- Jedes Zeichen außer Zahlen und Buchstaben (also auch Leerzeichen) innerhalb eines Strings soll durch einen Unterstrich ersetzt werden.

Also:
"Test_Test (im153-2)" -> "Test_Test__im153_2"

Bis jetzt sah der so aus: "\W\D[^_]", aber da stolpert er irgendwie über die Klammern und das Leerzeichen. Was mache ich falsch?

Das ganze ist übrigens für ein VB.NET Programm, wo ich dann die "Replace" Methode der Regex Klasse verwende.

Sephiroth
2007-12-03, 15:20:19
also quasi so?
$ echo "Test_Test (im153-2)" | sed -re 's/[^0-9a-z]/_/gi'
Test_Test__im153_2_

Monger
2007-12-03, 15:40:12
Habs mittlerweile "zu Fuß" mit "[^A-Za-z0-9_]" hingekriegt. Warum die andere Variante nicht funktioniert leuchtet mir zwar nicht ein, aber so geht es.

Xmas
2007-12-03, 15:54:50
Bis jetzt sah der so aus: "\W\D[^_]", aber da stolpert er irgendwie über die Klammern und das Leerzeichen. Was mache ich falsch?
Dein Ausdruck passt auf eine Sequenz von drei Zeichen:
- ein Zeichen das nicht alphanumerisch ist, gefolgt von
- einem Zeichen das keine Ziffer ist, gefolgt von
- einem Zeichen das kein Unterstrich ist.

Was du brauchst ist einfach nur "\W".

Monger
2007-12-03, 16:11:02
Hm, was mache ich denn, wenn ich keine Sequenz, sondern quasi eine Oder Verknüpfung haben will? Also: das Zeichen darf jetzt entweder dieses, oder jenes sein?

So wie es aussieht, will ich momentan nämlich doch die Backslashes ausnehmen, aber "\W^\\" oder auch "\W[^\\]"führt nunmal zu Blödsinn, wie geht es denn wirklich?

Xmas
2007-12-03, 16:32:53
So: "[^\w\\]"
Der Ausdruck in den eckigen Klammern steht für ein Zeichen. [abc] steht für (a oder b oder c). [^abc] ist negiert, also jedes Zeichen außer a, b und c.
Deswegen auch hier das kleine \w, da es negiert \W ist.

SentinelBorg
2007-12-03, 16:35:11
Für VB.Net Programmierer und auf VS2008 Wechsler, hab ich mir heute diesen schönen Regex ausgedacht:

Nullable\(Of {[a-zA-Z0-9\.]+}\)

Den als Suchfilter bei Find & Replace eintragen und bei Replace \1? rein.
Damit sollten alle bisherigen Typdefinitionen der Marke Nullable(of X) gegen das nun mögliche kurze X? ersetzt werden. :)

Monger
2007-12-03, 16:50:39
Okay, so ganz langsam dämmert's...

Deshalb macht man dann z.B. meinetwegen auch "[abc]+", um beliebige Wiederholungen eben dieses einen beliebigen Zeichens zuzulassen...

Ok, danke! :)