Der optionale Regex-Abgleich für eine Gruppe funktioniert nichtC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Der optionale Regex-Abgleich für eine Gruppe funktioniert nicht

Post by Anonymous »

Ich habe den folgenden Satz

Code: Select all

#bb John can #20 jiang stone [voila]
Ich möchte, dass mein C#-Regex mir 5 Übereinstimmungen mit meinen Gruppen gibt

Code: Select all

#bb
John Can
20
jiang stone
voila
Davon sind die Token an den Positionen #bb und voila optional.

Ich habe den folgenden regulären Ausdruck verwendet, der gut in einem Satz funktioniert, der nicht das erste #bb hat – zum Beispiel

Code: Select all

John can #20 jiang stone [voila]
gibt mir 4 korrekte Token mit dem Ausdruck

Code: Select all

@"(.*)#(\d+)(.*\s)(?:\[(.*)\])?"
Aber wenn ich das erweitere mit

Code: Select all

@"(?:#[a-zA-Z])?(.*)#(\d+)(.*\s)(?:\[(.*)\])?"
Es funktioniert nicht. Das #bb am Anfang des Satzes wird nicht als separates Token abgeglichen – stattdessen erhalte ich eine Übereinstimmung als

Code: Select all

b John Can
Ich habe mehrere Varianten ausprobiert, aber keine bietet mir eine optionale Übereinstimmung mit der ersten #.. Übereinstimmung. Was ich möchte ist, dass dies #{1 oder 2 Zeichen} sein kann und dies optional sein kann. Ich kann es haben, oder es fehlt möglicherweise. In diesem Fall sollte der Rest die Token zurückgeben.

Was stimmt mit meiner Regex nicht?

Vielen Dank für Ihre Hilfe

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post