C# Sonderzeichen Ignorieren?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Du willst also überprüfen, ob irgendwo in dem String einer der Strings in der "Du nicht!"-Liste vorkommt?

Oder muss der String durch ein nicht-Wort-Zeichen vom Rest getrennt sein?

Also soll z.B. wenn nach "alt" gesucht wird nur so was wie "alt.irgendwas" oder auch "alternative" als übereinstimmung zählen?


Tastaturbrix 
Beitragsersteller
 07.05.2020, 10:41

"alt.Irgendwas" => Filtern.
"Alternativ" => Nicht filtern.

Sowas meine ich. ^^

0
Isendrak  07.05.2020, 11:01
@Tastaturbrix

Na dann:

Schritt 1: Die benötigten using-Direktiven hinzufügen:

using System;
using System.Text.RegularExpressions;
using System.Linq;

Schritt 2: An entsprechender Stelle die Abfrage entsprechend ändern:

bool IsExcluded = ExcludedWordsArray.Select(word => Regex.Matches(folderName, "(?:^|[^\\w])(\\w+)", RegexOptions.IgnoreCase).Cast<Match>().Select(match => match.Groups[1].Value).Contains(word, StringComparer.OrdinalIgnoreCase)).Contains(true);

Die bool-Variable IsExcluded kann dann verwendet werden um zu überprüfen, ob folderName ein Wort aus ExcludedWordsArray enthält (true) oder nicht (false).

1
Tastaturbrix 
Beitragsersteller
 07.05.2020, 11:10
@Isendrak

Erstmal:

Diese Abfrage sieht ziemlich Verrückt und verrwirrend aus, aber Regex verwirrt mich im Allgemein noch etwas :D

Hab es ausprobiert funktioniert soweit, nur der lässt auch string durch die "so_alt" heißen, obwohl ich "SO" ausgefiltert habe.

Ne Idee warum ?

0
Isendrak  07.05.2020, 11:23
@Tastaturbrix
Ne Idee warum ?

Weil aus irgendeinem Grund der Unterstrich in C#-RegExes als Wortzeichen behandelt wird... o.O

Aber so funktionierts:

bool IsExcluded = ExcludedWordsArray
    .Select(word =>
        Regex.Matches(folderName, "(?:^|[\\W_])([^^\\W_]+)(?:$|[\\W_])", RegexOptions.IgnoreCase)
        .Cast<Match>()
        .Select(match => match.Groups[1].Value)
        .Contains(word, StringComparer.OrdinalIgnoreCase)
    )
    .Contains(true);
Diese Abfrage sieht ziemlich Verrückt und verrwirrend aus

Ohhh Jahhh, das tut sie in der Tat. das ganze ist zwar relativ einfach, wenn mans mal verstanden hat, aber bis mans denn mal verstanden hat liest es sich erstmal wie Altaramäisch von einem betrunkenen Sumerer in ägyptischen Hieroglyphen dahingekritzeltes. ^^

3
Tastaturbrix 
Beitragsersteller
 07.05.2020, 11:58
@Isendrak

Deine Ausdrucksweise gefällt mir :D

Es funktioniert, vielen Dank 1+.

Das Sternchen hast du dir aufjedenfall Verdient :D

1
ralphdieter  07.05.2020, 13:32

Hee, wenn Du so weiter machst, ist Nutzer regex bald arbeitslos!

2
Isendrak  07.05.2020, 13:45
@ralphdieter

Nur keine Sorge. Ich hab zwar durchaus n bisschen geregext, aber mindestens genauso viel gelinqt. ^^

2
ralphdieter  07.05.2020, 13:51
@Isendrak

OMG, du outest dich gerade als C#ler. Bei deinem Talent könntest du aber bestimmt auch ein richtiger Programmierer werden.

2
Isendrak  07.05.2020, 14:23
@ralphdieter
OMG, du outest dich gerade als C#ler.

Naja, C# ist mein Lieblingsprodukt von Microsoft. (Gut, das sagt nicht unbedingt viel über C# aus, da es so ziemlich das einzige von Microsoft fabrizierte ist, das ich ganz gerne benutze. Und dann auch meistens unter Verwendung von Mono auf nem Linux-System, aber ich benutze es. ^^)

Aber ich bastel auch ganz gerne mit C, Java und Python, gelegentlich auch mit PHP.

Bei deinem Talent könntest du aber bestimmt auch ein richtiger Programmierer werden.

Ouuu, da hoffe ich doch mal, du meinst "berufsmäßiger Programmierer". ^^

2

Für so etwas verwendet man reguläre Ausdrücke. Du wählst dabei ein Muster, welches alle validen beziehungsweise invaliden Namen abdeckt. Du kannst deine Zeichenkette, beispielsweise der Name des Ordners, auf dieses Muster prüfen. Reguläre Ausdrücke sind dabei allerdings nicht die einfachste Kost, was das lernen angeht, ich empfehle dir, dir dafür Zeit zu nehmen und beispielsweise Hilfen wie RegExr zu verwenden.


Tastaturbrix 
Beitragsersteller
 07.05.2020, 22:53

Vielen Dank .

hatte nun echt viele Fälle wo Regex am geeignetsten gewesen ist.
Genauso hier.

Das werde ich definitiv lernen...

0
Crysali  08.05.2020, 19:47
@Tastaturbrix

Wie gesagt, nimm dir Zeit dafür, es ist nichts, was man mal einfach so in paar Minuten lernt, sei es das Erstellen von RegEx Mustern oder das Benutzen dieser und der Ergebnisse im Code selbst.

0

Ich würde einen anderen Ansatz wählen:

Statt zu prüfen,
ob der Ordnername im Array enthalten ist,
wäre es doch genauer,
für jeden Ordnernamen das Array zu durchlaufen und zu prüfen, ob ein Wert des Arrays im String des Ordnernamen enthalten ist.

Pseudocode:

if(isFolderNameExcluded(folderName) ...

Methode:

boolean isFolderNameExcluded(String name){
*Schleife durch Array*
if(name contains curValue) -> return true;
return false;
}

Woher ich das weiß:Berufserfahrung

Ich verstehe nicht ganz, was Du vorhast, aber wenn Du nur ein paar Sonderzeichen ignorieren willst, warum entfernst oder ersetzt Du sie nicht einfach durch etwas, das besser passt?

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler