Laden...

Überflüssigen Text weglöschen

11 Antworten
2,158 Aufrufe
Letzter Beitrag: vor 17 Jahren
Überflüssigen Text weglöschen

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