Regex Wortende optional

Gast #6252349
Lesenswert?

Hallo zusammen,

ich habe beispielsweise den folgenden Text:

"Abc_01_BeispielText1"

Ich möchte einen Regex der sowohl den Text "Abc_01" als auch den Text 
"Abc_01_BeispielText1" erkennt. Alle anderen Kombinationen soll er nicht 
erkennt.

Mein bisheriger Regex ist: @"^Abc_(?<ref>\w{2})$"

Wie kann ich "BeispielText1" optional machen? Nach BeipsielText1 kommt 
das Wortende.
Gast #6252416
Lesenswert?

guelay schrieb:
> Hallo zusammen,
>
> ich habe beispielsweise den folgenden Text:
>
> "Abc_01_BeispielText1"
>
> Ich möchte einen Regex der sowohl den Text "Abc_01" als auch den Text
> "Abc_01_BeispielText1" erkennt. Alle anderen Kombinationen soll er nicht
> erkennt.
>
> Mein bisheriger Regex ist: @"^Abc_(?<ref>\w{2})$"
>
> Wie kann ich "BeispielText1" optional machen? Nach BeipsielText1 kommt
> das Wortende.

hier kannst du deine Regexp ausprobieren

https://regex101.com/r/BC025b/1/

so aus dem bauch heraus ^(Abc_\d{2})(?:_(.*))$ aber vielleicht gibt es 
was besseres
Gast #6252438
Lesenswert?

Imonbln schrieb:
>>
>> so aus dem bauch heraus ^(Abc_\d{2})(?:_(.*))$ aber vielleicht gibt es
>> was besseres
>
> nachtrag sollte ^(Abc_\d{2})(?:_(.*))?$ heißen.
Aber er soll am Ende nur BeispielText1 erkennen. Z.B. Beispieltext2 soll 
er nicht erkennen. Alle andere Textkombinationen soll er auch nicht 
erkennen. Nur "BeispielText1".
Gast #6252441
Lesenswert?

guelay schrieb:
> Imonbln schrieb:
>>>
>>> so aus dem bauch heraus ^(Abc_\d{2})(?:_(.*))$ aber vielleicht gibt es
>>> was besseres
>>
>> nachtrag sollte ^(Abc_\d{2})(?:_(.*))?$ heißen.
> Aber er soll am Ende nur BeispielText1 erkennen. Z.B. Beispieltext2 soll
> er nicht erkennen. Alle andere Textkombinationen soll er auch nicht
> erkennen. Nur "BeispielText1".

Ich möchte also nur diese Kombinationen erkennen: Abc_01 oder 
Abc_01_BeispielText1
Gast #6252444
Lesenswert?

guelay schrieb:
> Imonbln schrieb:
>>>
>>> so aus dem bauch heraus ^(Abc_\d{2})(?:_(.*))$ aber vielleicht gibt es
>>> was besseres
>>
>> nachtrag sollte ^(Abc_\d{2})(?:_(.*))?$ heißen.
> Aber er soll am Ende nur BeispielText1 erkennen. Z.B. Beispieltext2 soll
> er nicht erkennen. Alle andere Textkombinationen soll er auch nicht
> erkennen. Nur "BeispielText1".

Ich glaube das ist das was ich suche : ^(Abc_\d{2})(?:_(BeispielText1|))
Gast #6252458
Lesenswert?

guelay schrieb:
> Aber er soll am Ende nur BeispielText1 erkennen. Z.B. Beispieltext2 soll
> er nicht erkennen. Alle andere Textkombinationen soll er auch nicht
> erkennen. Nur "BeispielText1".

okay warum dann eine Regexp? ein Stringmatch am ende sollte deutlich 
Performanter sein  Wenn Rexep dann so

https://regex101.com/r/BC025b/4

^(Abc_\d{2})(?:_(BeispielText1))?

Meine Regexp wäre dann aber ^(Abc_\d{2}) und ein Stringvergleich auf das 
ende ob das "BeispielText1" ist. Wenn das statisch ist sollte der 
Stringvergleich mit regexp für den ersten teil deutlich besser für das 
Gesamtsystem sein.

Wenn "Abc_01" auch Statisch ist, dann zwei Stringvergleiche und keine 
regexp :D
Gast #6252466
Lesenswert?

Imonbln schrieb:
ay warum dann eine Regexp? ein Stringmatch am ende sollte deutlich
> Performanter sein  Wenn Rexep dann so
>
> https://regex101.com/r/BC025b/4
>
> ^(Abc_\d{2})(?:_(BeispielText1))?
>
> Meine Regexp wäre dann aber ^(Abc_\d{2}) und ein Stringvergleich auf das
> ende ob das "BeispielText1" ist. Wenn das statisch ist sollte der
> Stringvergleich mit regexp für den ersten teil deutlich besser für das
> Gesamtsystem sein.
>
> Wenn "Abc_01" auch Statisch ist, dann zwei Stringvergleiche und keine
> regexp :D

Abc ist statisch aber 01 nicht.
Gast #6252617
Lesenswert?

greedy bis leerzeichen? [^\s]
Abc_(\w{2})(?:_[^\s]*)?

^ und $ machen in dem Fall die Sache eher komplizierter als einfacher 
mMn
ZeilenAnfang geht noch gut:

^Abc_(\w{2})(?:_[^\s]*)?

Aber sobald Du nach dem zeilenEnde mitsuchst wird's haarig falls 
zwischen capture und Zeilenende noch Text auftauchen kann.

ich bliebe also bei
^Abc_(\w{2})(?:_[^\s]*)?
das trifft
für
1
Abc_01_BeispielText1
2
Abc_02Beispieltext
3
Abc_10_Beispiel Text1
4
Abc_20_Beispiel
5
Abc_99 das hier nicht
Abc_01_BeispielText1 , Abc_02 , Abc_10_Beispiel , Abc_20_Beispiel , 
Abc_99

wie gesagt mit Zeilenende wird's mir zu haarig ;)

'sid
Gast #6253717
Lesenswert?

Exact Abc_01 oder Abc_01_BeispielText1, beliebige Position in Zeile:
1
Abc_01(_BeispielText1)?

Die erste Nummer variabel:
1
Abc_[0-9]{2}(_BeispielText1)?
Oder, falls \d erlaubt:
1
Abc_\d{2}(_BeispielText1)?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren