reguläre ausdrücke
Martin Hein
- programmiertechnik
0 Martin Hein1 wahsaga
0 Arbeitsloser
hallo forum,
ich versuche, mir 'reguläre ausdrücke' beizubringen,
um das extendet search&replace meines codeeditors
efektiver nutzen zu können. ganz schön mächtig!
ich suche alle vorkommen von:
<zahl mit n ziffern und evt. tsd.-tennz.> m2
und will das tausender-trennzeichen "." durch das englische ","
ersetzen.
kann mir jemdna dabei helfen?
danke und
beste gruesse,
martin
hallo forum,
hab den regulären ausdruck für die suche selbst hinbekommen.
[0-9]*.[0-9]{3} m²
was ich nun noch nicht begreife ist, wie bei agument für
replace aussehen soll. aber ich weiss selbst nicht, ob das
nun hier hingehört.
beste gruesse,
heintz
hi,
hab den regulären ausdruck für die suche selbst hinbekommen.
[0-9]*.[0-9]{3} m²
was ich nun noch nicht begreife ist, wie bei agument für
replace aussehen soll.
Da du bestimmte Teile deines Suchtreffers übernehmen willst, brauchst du sog. Backreferences. Diese werden "erzeugt", in dem du Teilausdrücke klammerst:
([0-9]*).([0-9]{3}) m² oder
([0-9]*).([0-9]{3} m²)
Damit bekommst du jeweils die Teile des Treffers, die in Klammern stehen, als Backreferences, so dass du sie beim Ersetzen wieder benutzen kannst.
Wie man diese Backreferences dabei anspricht, kommt auf die RegEx-Implementierung - gängig sind bspw. $1 oder \1, wobei die Ziffer dann für die Position der Backreference im Suchausdruck steht.
Und da du den Punkt durch ein Komma ersetzen willst, fügst du beim Replacen dann Backreferences #1, ein Komma, und Backreferences #2 wieder zusammen.
gruß,
wahsaga
FETT !!!
... bin begeistert. super erklärt: kurz, verständlich, eindeutig.
... und hab mein universum damit um lichjahre aufgebohrt !
('1.000' || '1,000') dank und beste wünsche,
martin
gudn tach!
([0-9]*).([0-9]{3} m²)
(literale) punkte muessen mit backslash maskiert werden.
und falls mehrere punkte vorkommen, z.b. in "1.000.000", dann wird der erste punkt nicht gematcht. statt "[0-9]" kann man uebrigens auch kuerzer "\d" schreiben.
also ich wuerde es mal (in perl-schreibweise) mit
s/(\d+).(?=\d{3}(?:.\d{3})+ m2)/$1,/g
(ungetestet)
versuchen. fuer (?=...) schau mal im handbuch (perldoc perlman) unter "positive look-ahead assertion".
soweit klar? funzt's?
und natuerlich kann ich es mir wieder nicht verkneifen, darauf hinzuweisen, dass sowohl punkte als auch kommas weitgehend vermieden werden sollten als zifferngruppierungszeichen.
prost
seth
gudn tach!
s/(\d+).(?=\d{3}(?:.\d{3})+ m2)/$1,/g
moep!
einen fehler habe ich gefunden. richtiger ist
s/(\d+).(?=\d{3}(?:.\d{3})* m2)/$1,/g
aeh, und hier meinte ich perldoc perlre.
prost
seth
Hallo Martin,
ich versuche, mir 'reguläre ausdrücke' beizubringen (...)
In Eclipse gibt es bei der Suche einen tollen Assistenten, wenn das Häkchen regüläre (der Name stammt aus der Türkei) Ausdrücke aktiviert ist.
Und ein gutes Programm ist auch der Regex Coach
Gruß, der Arbeitslose