Regular Expressions Elemente aus Formeln
Tux
- programmiertechnik
0 Eork ut Eork0 Længlich
Hallo, ich habe einen Text, folgender Art:
2 Br4H + O2M + KSCN -> PbRe + Br5H
jetzt möchte ich alle Elemente, also:
Br, H, O, M, K, S, C, N, Pb, Re, Br, H
auslesen, nur krieg ich das mit Regular Expressions nich hin:
wenn ich einfach [A-Z] mache, dann geht mir bei Pb das b verlohren, also P. [A-Z][^a-z] lässt dann aber bei KSCN das SCN weg und ich bekomme nur das Element K.
Weiß jmd, wie ich mein Problem lösen kann?
2 Br4H + O2M + KSCN -> PbRe + Br5H
jetzt möchte ich alle Elemente, also:
Br, H, O, M, K, S, C, N, Pb, Re, Br, H
Die Elemente bestehen entweder aus einem Großbuchstaben oder einem Groß- gefolgt von einem Kleinbuchstaben. Vorsichtshalber drehen wir die Bedingung nochmal und stellen die komplexere an den Anfang:
[A-Z][a-z]|[A-Z]
In Javascript liefert
var s = "2 Br4H + O2M + KSCN -> PbRe + Br5H";
alert(s.match(/([A-Z][a-z]|[A-Z])/g));
das gewünschte Ergebnis.
[A-Z][a-z]|[A-Z]
So einfach? Danke!
.
Und, wie Elemente aufgebaut sind, hab ich schon gewusst ;-)
Hi,
[A-Z][a-z]|[A-Z]
So einfach? Danke!
noch einfacher:
[A-Z][a-z]?
Cheatah
Hi,
[A-Z][a-z]|[A-Z]
So einfach? Danke!noch einfacher:
[A-Z][a-z]?Cheatah
Nein, weil nicht alle Formeln einen Kleinbuchstaben haben!
Hi,
[A-Z][a-z]|[A-Z]
So einfach? Danke!
noch einfacher:
[A-Z][a-z]?
Nein, weil nicht alle Formeln einen Kleinbuchstaben haben!
Ja und? Der Ausdruck von Cheatah erlaubt das doch.
cu,
Andreas
[A-Z][a-z]|[A-Z]
So einfach? Danke!noch einfacher:
[A-Z][a-z]?
Nein, weil nicht alle Formeln einen Kleinbuchstaben haben!
Doch, ist schon richtig. Das Fragezeichen hinter dem Kleinbuchstaben sagt "eines oder keines" des vorangehenden Objekts (Kleinbuchstabe). Længlichs Lösung ist wohl noch besser, mir war bis dahin aber noch kein Element untergekommen, das drei Buchstaben hat.
Hello,
Doch, ist schon richtig. Das Fragezeichen hinter dem Kleinbuchstaben sagt "eines oder keines" des vorangehenden Objekts (Kleinbuchstabe). Længlichs Lösung ist wohl noch besser, mir war bis dahin aber noch kein Element untergekommen, das drei Buchstaben hat.
Guckst Du hier: http://de.wikipedia.org/wiki/Periodensystem
Hab ich aber auch lange nicht mehr reingeschaut.
Von Klasse 10 bis Klasse 13 galt immer: "Mit dem PS in der Hemdentasche, kommst Du Durch jede Klasse..." Und unser guter Chemielehrer bestand darauf, dass wir die Elemente und deren Ornungsnummern auswendig wussten. Oh Jeh. Ich hätte jetzt wohl nur noch Wasserstoff und Helium gewusst.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Aloha!
Und, wie Elemente aufgebaut sind, hab ich schon gewusst ;-)
Mir (und vermutlich auch Eork ut Eork) ging es darum, nicht einfach nur das Ergebnis zu posten, sondern vor allem den Weg dahin nachvollziehbar zu machen. Und der erste und wichtigste Schritt beim Basteln eines regulären Ausdrucks ist es nun einmal, daß man sich ganz genau überlegt, wie die Zeichenfolgen aussehen, die gematcht werden sollen - auch dann, wenn man es im Prinzip schon weiß.
Wenn man eine hinreichend genaue Vorstellung entwickelt hat, liegt die Formalisierung (und damit der Regex) meistens schon auf der Hand. Diese Formalisierung ist der zweite Schritt.
Der dritte Schritt ist dann gegebenenfalls Optimierung - das ist das, was Cheatah gezeigt hat. ;-)
Viele Grüße vom Længlich
Ciao!
Hallo, ich habe einen Text, folgender Art:
2 Br4H + O2M + KSCN -> PbRe + Br5H
jetzt möchte ich alle Elemente, also:
Br, H, O, M, K, S, C, N, Pb, Re, Br, H
M steht für ein beliebiges Metall? Als Elementsymbol gibt es das nämlich nicht.
Weiß jmd, wie ich mein Problem lösen kann?
Ein Elementsymbol beginnt immer mit einem Großbuchstaben: [A-Z]. Bei manchen (z.B. C) ist dann schon Schluß, bei anderen kommen noch ein (z.B. Mg) oder zwei (z.B Uuo) Kleinbuchstaben dazu. Zusammengefaßt: Ein Großbuchstabe und 0 bis 2 Kleinbuchstaben. Also [A-Z][a-z]{0,2}. Stelle dabei sicher, daß Dein Regex case-sensitiv ist (Modifier beachten)!
Ich kann's hier jetzt nicht testen, aber ich hoffe, es hilft Dir trotzdem weiter.
Viele Grüße vom Længlich