Forum: PC-Programmierung Regex Wortende 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 guelay (Gast)


Bewertung
0 lesenswert
nicht 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.

von Imonbln (Gast)


Bewertung
-1 lesenswert
nicht 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

von Imonbln (Gast)


Bewertung
0 lesenswert
nicht lesenswert
>
> so aus dem bauch heraus ^(Abc_\d{2})(?:_(.*))$ aber vielleicht gibt es
> was besseres

nachtrag sollte ^(Abc_\d{2})(?:_(.*))?$ heißen.

von guelay (Gast)


Bewertung
0 lesenswert
nicht 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".

von guelay (Gast)


Bewertung
0 lesenswert
nicht 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

von guelay (Gast)


Bewertung
0 lesenswert
nicht 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|))

von Imonbln (Gast)


Bewertung
0 lesenswert
nicht 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

von guelay (Gast)


Bewertung
0 lesenswert
nicht 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.

von sid (Gast)


Bewertung
0 lesenswert
nicht 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
Abc_01_BeispielText1
Abc_02Beispieltext
Abc_10_Beispiel Text1
Abc_20_Beispiel
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

von DPA (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Exact Abc_01 oder Abc_01_BeispielText1, beliebige Position in Zeile:
Abc_01(_BeispielText1)?

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

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.