2011-07-12 15 views
7

Ho bisogno di un Regex in un programma C#.L'accento Regex è insensibile?

ho per catturare un nome di un file con una struttura specifica.

ho usato la \ w classe char, ma il problema è che questa classe non corrisponde a qualsiasi carattere accentato.

Quindi come fare? Semplicemente non voglio mettere la lettera accentata più usata nel mio modello perché teoricamente possiamo mettere ogni accento su ogni lettera.

Quindi, anche se forse c'è una sintassi, per dire che vogliamo un case insensitive (o una classe che tiene in considerazione l'accento), o un'opzione "Regex" che mi permette di essere insensibile al maiuscolo/minuscolo.

Sai qualcosa del genere?

La ringrazio molto

+0

fornire non appaiati con –

+0

hai provato. dovrebbe: corrisponde a qualsiasi singolo carattere tranne un carattere di nuova riga – MrFox

+2

Puoi mostrarci cosa hai provato * nel codice *? –

risposta

4

Case-insensite funziona per me in questo esempio:

 string input [email protected]"âãäåæçèéêëìíîïðñòóôõøùúûüýþÿı"; 
    string pattern = @"\w+"; 
    MatchCollection matches = Regex.Matches (input, pattern, RegexOptions.IgnoreCase); 
+0

Corrisponde a quella stringa intera. –

+0

Sì, mi dispiace, ho usato RegexOptions.CultureInvariant, perché ho bisogno che fosse sensibile al maiuscolo/minuscolo :) – J4N

0

non si spara giù per questo, ma se si sta solo cercando di abbinare un nome di file, allora perché non andare nella direzione opposta e utilizzare caratteri esclusi?

[^<>:"/\|?*] 
1

Prova questo:

String pattern = @"[\p{L}\w]+"; 
-2

hai provato. dovrebbe: corrisponde a qualsiasi singolo carattere tranne un carattere di nuova riga. \ w: corrisponde a qualsiasi carattere di parola compreso il trattino basso. Equivalente a "[A-Za-z0-9_]". Quindi è logico che le lettere accentate siano escluse.

http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet

+0

Ti contraddici. Voglio dire, tu dici: '\ w' corrisponde a qualsiasi parola ed è equivalente a' [A-Za-z0-9_] ' –

0

Potete provare questo e vedere se funziona:

[\u00E9-\u00F8\w] 
2

Utilizzare questo \p{L} al posto del del classe \w

\p{L} è un punto codice unicode con la categoria "lettera". Quindi include ad esempio "äöüéè" e così via.

È anche possibile utilizzarlo nella propria classe di caratteri, se si vuole, ad esempio includere lo spazio o il punto come questo [\p{L} .]

Aggiornamento:

OK, ho riconosciuto che \w in .net anche includere le lettere Unicode e non solo quelle ASCII.

quindi non sono sicuro di quello che stai chiedendo. Se vuoi permettere cose che assomigliano a una lettera, ma non lo sono, allora penso che finirai usando \S (non uno spazio bianco).

forse aiuta se si mostra alcuni esempi.

11

Si potrebbe semplicemente sostituire i segni diacritici con alfabetici (near-equivalenze), e quindi utilizzare utilizzare la regex corrente.

Vedi per esempio: i caratteri accentati

How do I remove diacritics (accents) from a string in .NET?

static string RemoveDiacritics(string input) 
{ 
    string normalized = input.Normalize(NormalizationForm.FormD); 
    var builder = new StringBuilder(); 

    foreach (char ch in normalized) 
    { 
     if (CharUnicodeInfo.GetUnicodeCategory(ch) != UnicodeCategory.NonSpacingMark) 
     { 
      builder.Append(ch); 
     } 
    } 

    return builder.ToString().Normalize(NormalizationForm.FormC); 
} 

string s1 = "Renato Núñez David DeJesús Edwin Encarnación"; 
string s2 = RemoveDiacritics(s1); 
// s2 = "Renato Nunez David DeJesus Edwin Encarnacion" 
+0

infatti ho fatto un errore, la regex non stava prendendo la mia parola accentata, ma non era a causa del accento, ma a causa di un "-". Sono molto dispiaciuto per il tempo in cui ti ho lasciato libero. "\ w" funziona davvero – J4N

Problemi correlati