kEv*: regex für Dezimalzahlen

Hallo liebe SELFHTMLer,

ich Neuling auf dem Gebiet regex.
Folgende regex bringt mir z.T. die gewünschten Ergebnisse.

[1]?(?:\d+.?\d*|\d*.?\d+)

als Ergebniss im Programm Expresso findet dieser Pattern in meinem zu durchsuchenden Text folgende Kombinationen.

1
01
100
1.000
10.000
100.000

Was mache ich falsch wenn ich die Dimension der zu suchenden Zahl nicht kenne und beispielsweise auch Zahlen wie

1.000.000
100.000.000
1000.000.000

oder gar noch größer finden möchte?
Ich bin wie gesagt neu bei den regex, somit wäre ich verbunden wenn mir das jemand erklärt wie man sich am besten an einen Suchstring rantatstet.

Nebenher versuch ich mein Glück weiter, vielleicht finde ich die Lösung ja zufällig.
Ich weiß nach nur kurzem lesen das dieses Thema wohl sehr komplex ist.

LG
kev1n

--

SELFCODE:
sh:( fo:| ch:? rl:° br:^ ie:{ mo:| va:) de:] zu:) ss:| ls:[ js:|
---

  1. +- ↩︎

  1. Hi,

    Was mache ich falsch wenn ich die Dimension der zu suchenden Zahl nicht kenne und beispielsweise auch Zahlen wie

    1.000.000
    100.000.000
    1000.000.000

    oder gar noch größer finden möchte?

    Tim hat hier erst vor ein paar Tagen einen entsprechenden Ansatz
    geschrieben. Ob das für dich zutrifft, hängt aber vom zu durchsuchenden Text ab: https://forum.selfhtml.org/?t=177662&m=1170667

    Timo

    1. Tim hat hier erst vor ein paar Tagen einen entsprechenden Ansatz
      geschrieben.

      Es war Tom

      Timo

    2. Hallo liebe SELFHTMLer,

      das Topic hat schonmal weitergeholfen.
      Meine neue regex sieht nun so aus und findet alles was gefunden werden soll.
      Leider doch etwas zuviel.

      Die Ergebnisse sind gewünscht:
      ------------------------------
      8.752 Kemzen
      114 Kolonisationsschiff
      32.509 Handelsriese
      2.000 Handelsriese
      135.000 Handelsriese
      1.000 Handelsriese
      9.700 Narubu
      111.112.222.333.444.117.100 Narubu
      700 Violo
      300 Narubu
      11.000 Narubu
      130.020 Bloodhound
      19.221 schwerer
      879 Finur
      309 Fusionator
      808 Grandor
      5.031 Handelsschiff
      337 Invasionseinheit
      1.067.841 Narubu
      2.192.365 Noulon
      52.199 Rettungsschiff
      1.105.784 Snatcher
      235.796 Violo
      1.132 Zemar

      Das sollte nicht mehr erkannt werden.
      ----------------------
      01 von
      01 von
      117 von
      01 von
      01 von
      01 von
      01 von
      01 von
      ...
      5 Anfragen
      5 Anfragen
      2 Anfragen
      1 Anfrage
      1 Anfrage
      1 Anfrage
      1 Anfrage
      150.21 Millisekunden
      43 CEST
      2008 by

      Hier mal der String der durchsucht wird. (bißchen lang bitte nicht schimpfen)
      ----------------------------------------
      ....

      1.000 Handelsriese X
       5:455:9   auflösen
      für Allianz freigeben
       kemzen 01 8.752 Kemzen
       22:220:6
      für Allianz freigeben
       koloschiffe 01
      114 Kolonisationsschiff X
       21:157:21   auflösen
      für Allianz freigeben
       TRANS *
      32.509 Handelsriese X
       21:57:2   auflösen
      1.000 Handelsriese X
       21:57:2   auflösen
      für Allianz freigeben
       trugar 01 12.800 Trugar
       22:220:6
      für Allianz freigeben
       versorgung 01
      25.400 Narubu X
       21:157:21   auflösen
      für Allianz freigeben
       versorgung 02
      22.500 Narubu X
       21:157:21   auflösen
      für Allianz freigeben
       versorgung 03
      6.500 Narubu X
       21:157:21   auflösen
      für Allianz freigeben
       versorgung 04
      9.700 Narubu X
       21:157:21   auflösen
      für Allianz freigeben
       versorgung 05
      111.112.222.333.444.117.100 Narubu X
       21:157:21   auflösen
      für Allianz freigeben
       versorgung 06
      22.500 Narubu X
       21:157:21   auflösen
      für Allianz freigeben
       versorgung 117
      9.900 Narubu X
       21:157:21   auflösen
      für Allianz freigeben
       versorgung 982 800 Narubu
      für Allianz freigeben
       Flottenverstärkung 9.000 Narubu

      00:52:45

      für Allianz freigeben
       Flottenverstärkung 700 Violo

      02:32:13

      für Allianz freigeben
       Flottenverstärkung 300 Narubu

      02:48:20

      für Allianz freigeben
       Flottenverstärkung 300 Narubu

      02:48:21

      für Allianz freigeben
       Flottenverstärkung 11.000 Narubu

      02:48:37

      für Allianz freigeben
       Flottenverstärkung 400 Narubu

      02:48:58

      für Allianz freigeben
       Flottenverstärkung 1.000 Narubu

      06:08:22

      für Allianz freigeben
       Flottenverstärkung 500 Narubu

      06:08:24

      für Allianz freigeben
       Flottenverstärkung 900 Narubu

      06:08:24

      für Allianz freigeben
       Flottenverstärkung 1.000 Narubu

      06:08:24

      für Allianz freigeben
       Flottenverstärkung 900 Narubu

      06:08:24

      für Allianz freigeben
       Flottenverstärkung 900 Narubu

      06:08:24

      für Allianz freigeben
       Flottenverstärkung 800 Narubu

      06:08:35

      für Allianz freigeben
       bloodhound 01 130.020 Bloodhound

      02:52:06

      für Allianz freigeben
       bomber 01 19.221 schwerer Bomber

      02:52:06

      für Allianz freigeben
       finur 01 879 Finur

      02:52:06

      für Allianz freigeben
       fusionator 01 309 Fusionator

      02:52:06

      für Allianz freigeben
       grandor 01 808 Grandor

      02:52:06

      für Allianz freigeben
       handelsschiffe 01 5.031 Handelsschiff

      02:52:06

      für Allianz freigeben
       invasion 01 337 Invasionseinheit

      02:52:06

      für Allianz freigeben
       narubu 01 1.067.841 Narubu

      02:52:06

      für Allianz freigeben
       neomar 01
      02:52:06

      für Allianz freigeben
       noulon 01 2.192.365 Noulon

      02:52:06

      für Allianz freigeben
       rettungsschiff 01 52.199 Rettungsschiff

      02:52:06

      für Allianz freigeben
       snatcher 01 1.105.784 Snatcher

      02:52:06

      für Allianz freigeben
       violo 01 235.796 Violo

      02:52:06

      für Allianz freigeben
       zemar 01 1.132 Zemar

      neues Geschwader erstellen

      Zeitrechnung der Erde: 09:20:57 - 28.09.2142

      5 Anfragen an Erde
      5 Anfragen an Jupiter
      2 Anfragen an Kallisto
      1 Anfrage an Saturn
      1 Anfrage an Rhea
      1 Anfrage an Pluto
      1 Anfrage an Charon

      Ausführungszeit: 150.21 Millisekunden auf Webserver 6.

      Version 3.1.0a
      Letztes Update: Mon Apr 21 08:00:43 CEST 2008

      Copyright © 2005-2008 by Florian Geyer Online-Dienste
      ----------------------------------------

      Sollte ich nun vielleicht doch die Schiffsklassen in ein Array packen und in einer Schleife mein regex zusammenbauen um nur die Anzahl der Schiffe zu bekommen?
      Wie würdet ihr das anfassen?

      Die Schiffsklassen sind immer bekannt. Nur eben die Zahl davor nicht.

      LG
      kev1n

      --

      SELFCODE:
      sh:( fo:| ch:? rl:° br:^ ie:{ mo:| va:) de:] zu:) ss:| ls:[ js:|
      ---
      1. Hallo liebe SELFHTMLer,

        [0-9,.]+\s\b[a-zA-Z]+

        LG
        kev1n

        --

        SELFCODE:
        sh:( fo:| ch:? rl:° br:^ ie:{ mo:| va:) de:] zu:) ss:| ls:[ js:|
        ---
      2. 11.000 Narubu
        130.020 Bloodhound
        19.221 schwerer    ??????????????
        879 Finur

          
        my $re = qr/  
           [1-9]           # beginnt mit 1-9  
           \d{0,2}         # gefolgt von optional weiteren 2 \d  
           (?:\.\d\d\d)*   # gefolgt von beliebig vielen Gruppen von .ddd,  
                           # nicht speichern  
           \s              # gefolgt von genau einem Whitespace  
           (?!            # Negative: Lookahead Assertion:  
                           # schau, dass das folgende NICHT ist  
             \b            # wordboundery  
             (?:  
              von  
             |  
              Anfragen?  
             |  
              CEST  
             |  
              Millisekunden?  
             )  
             \b              # wordboundary  
           )  
          
           [A-Z][A-Za-z]+    # Ein Wort, das mit Grossbuchstaben beginnt  
           /x;  
          
        while( $string =~ /($re)/g){  
          print $1, "\n";  
        }  
        
        

        Übersetzung in eine Sprache deiner Wahl ist deine Übung.

        mfg Beat

        --
        Woran ich arbeite:
        X-Torah
           <°)))o><                      ><o(((°>o
        1. Hallo liebe SELFHTMLer,

          vielen Dank für eure Mühen.
          Das Thema regex ist doch sehr komplex und das mal eben nebenbei wohl nicht machbar. Somit werde ich wohl nicht um weiteres lesen umhinkommen, um auch in Zukunft vernüftig damit arbeiten zu können.

          LG
          kev1n

          --

          SELFCODE:
          sh:( fo:| ch:? rl:° br:^ ie:{ mo:| va:) de:] zu:) ss:| ls:[ js:|
          ---
  2. Hallo liebe SELFHTMLer,

    so, nun habe ich die gewünschte Regex.
    Eine Frage bzw. zwei Fragen diesbezüglich habe ich noch.
    Erstmal die regex:

    ------
    (?<shipamount>[1-9][0-9,.]+)\s(?!\b(?:von|Anfragen?|CEST|Millisekunden|by|Florian?)\b)(?<shipclass>(?:[A-Z][a-z]+|[a-z]+\s[A-Z][a-z]+)|(?:[A-Z][a-z]+))|(?<shipclass>[A-Z][a-z]+|[a-z]+\s[A-Z][a-z]+)\s(?<shipamount>[0-9,.]+)\s((?<shipamount>[0-9,.]+))

    Dieser Teil intressiert mich sehr und den würde ich gern verbessern.
    (?<shipclass>[A-Z][a-z]+|[a-z]+\s[A-Z][a-z]+)\s(?<shipamount>[0-9,.]+)\s((?<shipamount>[0-9,.]+))

    Dieser soll nur finden:

    schwerer Bomber 0 (12.345)
    oder
    Snatcher 1.445.555 (765)

    Lassen sich nun beim Beispiel Snatcher die Zahlen 1.445.555 und 765 vernünftig gruppieren?
    Am besten wäre wenn die regex mir diese beiden Zahlen gleich addiert. Das ist ja aber nicht Aufgabe einer regex, aber das was ich gern erreichen möchte.
    Ansonsten bleibt mir nur eine Möglichkeit, der Zahl in klammern eine andere Gruppe zu stecken.

    LG
    kev1n

    --

    SELFCODE:
    sh:( fo:| ch:? rl:° br:^ ie:{ mo:| va:) de:] zu:) ss:| ls:[ js:|
    ---