Forum: PC-Programmierung Regex Sonderzeichen erkennen, optional


von Flo (Gast)


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)


Lesenswert?

1
[0-9]{5}
2
bzw.
3
\d{5}

von W. (Gast)


Lesenswert?

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

von Minimalist (Gast)


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)


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:
1
$ cat r
2
=Z70+12444.099-K1255
3
==U44=88009-P9183
4
5
$ cat r.pl
6
#!/usr/pin/perl
7
if (m/^\W+    # at begin, non-word(s)
8
      \w+    # some words
9
      \W+    # non-words
10
      (\d+)  #digits
11
      /x) { print "$1\n"; }
12
$ cat r | perl -n r.pl
13
12444
14
88009
15
$

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

leo

von Sven B. (scummos)


Lesenswert?

regex101.com ist super, dringende Empfehlung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.