Regular Expression

  • Antworten:10
Johannes
  • Forum-Beiträge: 75

02.04.2012, 12:52:48 via Website

Der Titel glaub ich sagt schon was ich machen will, ich möchte einen SMS Text verarbeiten!
Der Aufbau ist am Anfang immer gleich wie folgt:
" Einsatz für FF Name: Straße 10 B21 Mittelbrand, DL mit FF"
1String hilfs1 [] = message.split("\\:");
2
3 final Pattern searchRex = Pattern.compile("(^A-Za-zßöÖäÄüÜ-)+(\\s).(0-9){1,3}(A-Za-z)." );
4 Matcher findPairs = searchRex.matcher(hilfs1[1]);
5 if ( findPairs.find())
6 {
7 adress = findPairs.group(1) + findPairs.group(2) + findPairs.group(3)+ findPairs.group(4);
8 }
Zuerst splitte ich mir den Teil heraus, welcher nach dem Doppelpunkt steht, und dann versuche ich mit der RegEx die Straße zu bekommen,
die Straße kann aber ja wie folgt aussehen: Test-Strasse 66, Test-testi-Straße 66, Straße 66a, Straße 666b, Test-testi-Straße 666b

Was immer gleich ist die Straße beginnt nach dem ":" und bervor die Taktische Bezeichnung ("B21", kann auch "T2",.. sein) beginnt ist ein Leerzeichen

Oben sieht man eh meinen Code aber so ganz stimmt der noch nicht für die Fälle, hat jemand eine Idee wie man das genau macht?

lg

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

02.04.2012, 12:56:26 via App

Prüfe doch ab, wo B21 oder T2 oder... steht. Die Straße ist dann der String zwischen Doppelpunkt und dieser Position.

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Johannes
  • Forum-Beiträge: 75

02.04.2012, 13:02:11 via Website

Ja das ist woll die beste Idee, werds mal versuchen, was muss ich da zum suchen verwende search for String gibts ja nicht, und wie sag ich ihm dann das er den Text bis zeichen(char) z.B. 15 nehmen soll?


lg

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

02.04.2012, 13:06:12 via App

Da ich mit Basic entwickele und von Java keine Ahnung haben, kann ich Dir diese Frage leider nicht beantworten.

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

02.04.2012, 13:18:09 via Website

Johannes
Ja das ist woll die beste Idee, werds mal versuchen, was muss ich da zum suchen verwende search for String gibts ja nicht, und wie sag ich ihm dann das er den Text bis zeichen(char) z.B. 15 nehmen soll?


lg

Für Regex schau mal hier: http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

Dieses sehr simple Pattern matcht auf:
1 Leerzeichen, 1 oder mehr Buchstaben/Striche, 1 Leerzeichen, 1 oder mehr Buchstaben/Zahlen, 1 Leerzeichen

\\s([\\w\\-]+)\\s([\\w\\d]+)\\s

Nur vorsagen lassen bringt dir aber nichts. Du solltest schon verstehen was du da tust!

Antworten
Johannes
  • Forum-Beiträge: 75

02.04.2012, 13:30:59 via Website

[code] String hilfs1 [] = message.split("\\:");
String hilfs2[];
String bezeichnungen [] = {"B2", "B21", "T2", "T3"};
boolean check = false;
for (int i=0; check == true; i++)
{
final Pattern searchRex = Pattern.compile("["+bezeichnungen[i]+"]{1}" );
Matcher findPairs = searchRex.matcher(hilfs1[1]);
if ( findPairs.find())
{
hilfs2 = hilfs1[1].split(bezeichnungen[i]);
adress = hilfs2[0];
check = true;
}

}[/code]

Das ist jetzt mein Code dachte so funktionierts, aber scheinbar hab ich noch einen Fehler beim RegEx ausdruck

Antworten
Johannes
  • Forum-Beiträge: 75

02.04.2012, 13:46:35 via Website

laut dem Tester findet er wenn ich den code so schreibe "B21?" findet er es!

Es muss ja nicht match er soll es ja nur finden, kann ich nicht abfragen ob es drinnen vorkommt?

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

02.04.2012, 13:56:54 via Website

Ja natürlich

[B2]{1} matcht auf eine Zeichenkette der Länge 1, die aus einem B oder einer 2 besteht.
Das matcht bei B2 sogar 2 mal, dafür aber auch bei B3 oder JAFLJKHSDLJAFH2.

Nimm die Regex, die ich oben geschrieben habe. Die matcht komplett auf " bla-bla-strasse 4893xyz", also genau das was nach dem Doppelpunkt folgt

Aber tu dir selbst einen Gefallen und programmiere nicht durch Raten.
Ich nehme an du programmiert was für die Feuerwehr...das sollte auch robust funktionieren und keine Flickschusterei sein.

— geändert am 02.04.2012, 14:00:12

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

02.04.2012, 17:07:20 via Website

was muss ich da zum suchen verwende search for String gibts ja nicht
Doku lesen: String.indexOf()
(womit ich nicht sagen will, das diese Lösung "besser" wäre als regex, aber "gibts nicht" ist halt falsch)

und wie sag ich ihm dann das er den Text bis zeichen(char) z.B. 15 nehmen soll?
Doku lesen: String.substring()

Wie Rafael schon sagte: Raten ist nicht der Weg.
Lies die die Grundlagen des Werkzeugs an, das du verwenden willst, alles andere hat auf Dauer keinen Wert.
(Was mit String geht, findest du zB hier)

Antworten