Moin moin,
Ich hätte da mal wieder ein anliegen. Ich hab echt ewig gesucht aber nichts brauchbares gefunden. Ich möchte ein Programm starten und wenn es beendet ist die von dem Programm erstellte Datei temp.txt auslesen in der steht:
.....
word 57326 is hello
.....
Ich möchte alles weglöschen ausser 57326 und hello. Das Problem ist dass das Wort aber nicht immer gleich heisst und auch die Zahl nicht. Kann ich das mit Regex irgendwie machen?
Kann mir da wer helfen?
Hi!
Mit RegEx sollte das funktionieren:
[Artikel] Regex-Tutorial 1.00
Ansonsten wenn das Muster "word xxxxx is meinWort" immer gleich ist, könntest du auch nach dem 3. Leerzeichen oder "is" suchen und den String dort auftrennen.
Mfg NeuroCoder
Der String ist immer gleich
word <zahl> is <wort>
🙂
Ich werd mir das mal ansehen danke!
Hallo Sebastian K.,
naja, mit "word <zahl> is <wort>" hast du ja schon fast den Regex-Pattern. Du musst für <zahl> nur noch das Muster für Zahl (\d+) und für <wort> nur noch den Platzhalter für wort (\w+) einsetzen. Damit hast du den Rest zwar nicht "gelöscht", aber du bekommst über Match.Groups Zugriff auf die relevante Information, was ja noch viel besser, weil flexibler ist.
herbivore
PS: Den Titel habe ich mal geändert, denn was hat deine Frage mit "Programm starten und verarbeiten" zu tun?
Kann mich jemand mit nem Codebeispiel versorgen bitte? Ich bin echt eine Niete wenns um Regex geht da kenn ich mich ech nicht aus und aus dem PDF werd ich nich schlau 🤔
Sorry!
Hallo Sebastian K.,
herbivore hat ja die Lösung in Worten schon hingeschrieben.
Laut Tutorial von webstarg, 4.14 RegexMatchEvaluator
(Allgemein:
C#-Code:Regex.Replace([ZuErsetzen], [Pattern], [Ersatz]);
)
Also:
Wieder aus dem Tutorial Punkt 4.6 Vordefinierte Zeichenklassen.
Lösung, dein benötigtes Pattern, steht dort auch gleich:
\D: ein Zeichen, das keine Ziffer ist, also [^\d]
egibt
Regex.Replace("word 57326 is hello", "[^\d]+", "");
Nicht getestet! Sollte aber so gehen.
Gruß falangkinjau
Fehler 1 Nicht erkannte Escapesequenz. C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio 2005\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs 12 67 ConsoleApplication3
Hmmm..... mist wie ich regex hasse 😁
Naja ich werd mich da mal reinhängen vielleicht verzapf ich ja doch noch was brauchbares.
Hallo Sebastian K.,
ah, der Backslash.
Probiere das nochmal:
String strSomething = "word 57326 is hello";
String strNew = Regex.Replace(strSomething, "[^\\d]+", "");
Gruß falangkinjau
[edit] Ich habe es mal getestet und bei mir funktioniert es so.
Hallo Sebastian K.,
Naja ich werd mich da mal reinhängen
das ist die richtige Einstellung. Regex ist leicht. Inbesondere bei so einfachen Ausgangsdaten wie du sie hast. Außerdem habe ich, wie schon FZelle bemerkt hat, die Lösung schon geschrieben (was falangkinjau geschrieben hat, ist allerdings wohl nicht ganz was du willst).
Du kannst deine Regex texten mit dem On-the-fly Regex-Tester: Regex-Lab.
herbivore
Wow also das Tool hat mich echt beeindruckt. Ich werd mal ein bisschen rumexperimentieren 🙂
edit: so habs geschafft, das ganze schaut nun so aus:
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace ConsoleApplication2
{
class Program
{
public static bool found = false;
static void Main(string[] args)
{
string result;
TextReader tr = new StreamReader("test.txt");
int NumberOfLines = 100;
for (int i = 1; i < NumberOfLines; i++)
{
string templine = tr.ReadLine();
try
{
if (templine.StartsWith("word") == true)
{
result = Regex.Replace(templine, "word for [0-9a-zA-Z]+ is ", "");
Console.WriteLine(result);
found = true;
break;
}
}
catch (Exception)
{
}
}
if (found)
{
Console.ReadKey();
}
else
{
Console.WriteLine("string not found.");
Console.ReadKey();
}
}
}
}
Danke an alle für die Hilfe. Besonders herbivore für das geniale Tool!
Original von Sebastian K.
Fehler 1 Nicht erkannte Escapesequenz. C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio 2005\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs 12 67 ConsoleApplication3
Am besten gibst du vor den Regex-String ein @, denn wenn du Backslash und andere Zeichen (Anführungszeichen) noch mit Backslash escapen willst, dann schaut der Pattern (das Regex-Muster) nicht mehr wirklich übersichtlich aus (und beim Überarbeiten des Regex-Patterns kommt dann Verwirrung auf...).
grüße
webstarg