Forum: PC-Programmierung Regex Sonderzeichen erkennen, optional


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Flo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe das folgendes Regex-Problem.

ich versuche ein Regex zu erstellen der beispielsweise 12444 und 88009 
aus folgenden Texten erkennt:

Textbeispiel1: =Z70+12444.099-K1255
Textbeipsiel2: ==U44=88009-P9183

Mein Regex bis jetzt: =?=([^\\s,]+)\\+(?<ModuleNr>[^\\s,]+)\\.([^\\s,]+)
Dieser Regex kann aber nur 11307 aus Beispieltext1 erkennen. Wie kann 
ich das zweite Sonderzeichen im Beispieltext2 optional machen und das 
dritte Sonderzeichen ist entweder = oder +. Also Regex was ich suche 
soll sowohl 12444 aus BeispielText1 als auch 88009 aus Beispieltext2 
erkennen.

Gruß

von Minimalist (Gast)


Bewertung
0 lesenswert
nicht lesenswert
[0-9]{5}
bzw.
\d{5}

von W. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
echo \
    "Textbeispiel1: =Z70+12444.099-K1255\n" \
    "Textbeipsiel2: ==U44=88009-P9183" \
| perl -nle 'print $1 if /\b(\d+)\b/'

von Minimalist (Gast)


Bewertung
0 lesenswert
nicht lesenswert
W. schrieb:
> | perl -nle 'print $1 if /\b(\d+)\b/'

Nope, das matcht auch auf die ".099-" in Textbeispiel1.
Der Quantifizierer muss sein, sonst wird's nicht eindeutig.

von leo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Flo schrieb:
> Textbeispiel1: =Z70+12444.099-K1255
> Textbeipsiel2: ==U44=88009-P9183

Leider sagst du nicht den Dialekt deiner Regex dazu, anyway hier in 
Perl:
$ cat r
=Z70+12444.099-K1255
==U44=88009-P9183

$ cat r.pl
#!/usr/pin/perl
if (m/^\W+    # at begin, non-word(s)
      \w+    # some words
      \W+    # non-words
      (\d+)  #digits
      /x) { print "$1\n"; }
$ cat r | perl -n r.pl
12444
88009
$ 

Die Erweiterun /x ist sehr zu emofehlen, um das zu dokumentieren.

leo

von Sven B. (scummos)


Bewertung
0 lesenswert
nicht lesenswert
regex101.com ist super, dringende Empfehlung.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.