Text durchsuchen mit RegEx

Yaslaw

alter Rempler
Moderator
Bei RegEx191 kannst du dein Versuch speichern. Mach das und setze den Link hier ins Forum, dann sehe ich was du bastelst. Meine Links sind solche, da siehst du meine Tests.

1633614480865.png
 

Yaslaw

alter Rempler
Moderator
Du hast ein anderer Format als im Einleitungspost geschrieben. Klar passte mein Pattern nicht.
Der hier passt. Updated RegEx
Code:
(?<name>\b[ \w_-]+\b)\s*=\s*\\"(?<value>.*?)\\"
 

CopWorker

Erfahrenes Mitglied
Hallo Yaslaw,
im RegEx101 Tester schon.
Blos C# akzeptiert das pattern als string nicht.
Keine Ahnung warum.

C#:
string pattern = @"(?<name>\b[ \w_-]+\b)\s*=\s*\\"(?< value >.*?)\\"";

Die runde Klammern "(?<value>.*?)" passt dem Compiler nicht, erstmal.
Ohne '@' ist das gleiche Drama.
 

Anhänge

  • RegEx_PatternError.PNG
    RegEx_PatternError.PNG
    24,1 KB · Aufrufe: 0

CopWorker

Erfahrenes Mitglied
Hallo Yaslaw,
alle zurück.
Hab´ noch die Doppelten Hockkommas vergessen.
C#:
string pattern = @"(?<name>\b[ \w_-]+\b)\s*=\s*\\""(?<value>.*?)\\""";

Jetzt gibt zumindest der Compiler Ruhe.

Und so funktioniert es wirklich. Da werden die einzelnen Segmente (Name="Wert") in die Liste übernommen.
C#:
string pattern = @"(?<name>\b[ \w_-]+\b)\s*=\s*""(?<value>.*?)""";

Jetzt bleit nur noch der andere Typ von Wert zu erkennen.
Name="Wert als Text"
Name='Wert als Zahl'

Kann man das im Pattern verodern oder s.ä.?

Grüße CopWorker
 

CopWorker

Erfahrenes Mitglied
Hallo Yaslaw,
funktioniert auch mit den einfachen Hochkommas. [""']:
C#:
string pattern = @"(?<name>\b[ \w_-]+\b)\s*=\s*[""'](?<value>.*?)[""']";

Problem gelöst.
Ich bin sehr erfreut.
Das mit den RegEx101 war mir nicht bekannt.
Ist aber ´ne große Hilfe.

Nochmals vielen Dank.
Grüße von CopWorker
 

CopWorker

Erfahrenes Mitglied
Hallo Yaslaw,

kann ich auch ohne die MultiLine Option gezielt nach einem Text suchen?
C#:
"<Storages IP=\"192.168.0.29\" Server=\"OPC.SimaticNET.S7OPT\" Computer=\"WG-DE-D11001DS\" Station=\"MIH-COMMON-0\" SPS=\"MIH-COMMON-0-PLC\" Object=\"OpcUa_MIH-COMMON-0-PLC\" Comment=\"Lokaler OPC-UA Server\" Type=\"SimaticNET.S7\" Company=\"Coperion\"   />"

Da möchte ich ich nur den Text " Object=\"OpcUa_MIH-COMMON-0-PLC\" selectieren.
Wobei vor und nach dem = Zeichen auch ein oder mehrere Leerzeichen stehen können.
Auch ist es möglich, dass vor "Object" und nach dem gesuchten Text mehrere Leezeichen erlaubt sind.

Ich habe es mit @"(?<= .?Object).*?(?=\s*[""'](?<value>.*?)[""'])" versucht.

Funktioniert irgendwie nicht.

Vielen Dank für deine Hilfe
Gruß von CopWorker
 

CopWorker

Erfahrenes Mitglied
Hallo Yaslaw,

hast recht, wozu die ?.
den delimiter musste ich noch erweitern, da C#. [""']
Funktioniert bestens.

Vielen Dank,
Grüße von CopWorker