C# 如何使用Regex.IsMatch查找是否有带重音符号的字母(é;、á;、à;,等等)
你好,我有这个代码:C# 如何使用Regex.IsMatch查找是否有带重音符号的字母(é;、á;、à;,等等),c#,C#,你好,我有这个代码: string _name = this.txtNome.Text; if ( Regex.IsMatch(_name, @"[^a-zA-Z\s]") ) return false; var matches = _regex.Matches(input); foreach (var match in matches.Cast<Match>()) { Debug.WriteLine(match.Value); } 我试图找
string _name = this.txtNome.Text;
if ( Regex.IsMatch(_name, @"[^a-zA-Z\s]") )
return false;
var matches = _regex.Matches(input);
foreach (var match in matches.Cast<Match>())
{
Debug.WriteLine(match.Value);
}
我试图找到一种方法来塑造像“é,á,í,等等”这样的角色
我试图搜索,但没有找到任何内容。我不知道一个正则表达式支持所有重音,但您可以使用此扩展方法:
public static class StringExtensions{
public static IEnumerable<char> GetAccentCharacters(this string text)
{
foreach(char c in text)
{
string normalizedChars = c.ToString().Normalize(NormalizationForm.FormD);
if(normalizedChars.Length == 2 && normalizedChars[1] == '\u0301')
yield return c;
}
}
}
我使用将重音字符一分为二来查找重音字符的'\u0301'
-char。然后我返回原始的char
阅读:下面是一个使用正则表达式和相关函数的示例。我不认为它完全回答了你的问题(很难说你的问题是什么)。你需要稍微摆弄一下以满足你的需要 下面是我要看的文本:
private const string input =
@"J’étais étudiant à Trois Rivières, Québec. NotA123WordNumbers
Mon école primaire était St-François d’Assisse. J’avais du fun a Noël.
J’ai un chapeau sur ma tête Some Spanish: Acuña, Cámara, País, Corazón,
Número, Lingüística";
下面是我将要使用的模式:
private const string pattern = @"[\p{IsBasicLatin}\p{IsLatin-1Supplement}\p{IsLatinExtended-A}\p{IsLatinExtended-B}-[ ,\.0-9]]+";
private static readonly Regex _regex = new Regex(pattern);
\p{some name}
元素是一个命名块。奇怪的[ABC-[,\.0-9]]
意味着第一个模式中的所有内容减去第二个模式中的内容。这是
他说的是:
- 考虑由
、IsBasicLatin
、IsLatin-1supplment
或IsLatin-extended-a
字符组中的任何内容组成的分组IsLatin-extended-B
- 这不是空格、逗号、句点或数字
- 匹配由一个或多个模式组成的模式
string _name = this.txtNome.Text;
if ( Regex.IsMatch(_name, @"[^a-zA-Z\s]") )
return false;
var matches = _regex.Matches(input);
foreach (var match in matches.Cast<Match>())
{
Debug.WriteLine(match.Value);
}
如果有人需要,我真的想出了一个更简单的方法 如果转到ascii表,“À”是带重音的第一个字母,“ÿ”是最后一个字母,因此代码如下:
J
étais
étudiant
à
Trois
Rivières
Québec
NotA
WordNumbers
Mon
école
primaire
était
St-François
d
Assisse
J
avais
du
fun
a
Noël
J
ai
un
chapeau
sur
ma
tête
Some
Spanish:
Acuña
Cámara
País
Corazón
Número
Lingüística
if ( Regex.IsMatch(_name, @"[^a-zA-ZÀ-ÿ\s]") )
return false;
当然,中间有一些特殊的记号,但我不认为有人会错过一个写“他”的名字。你想只匹配带有重音的字母吗?或者任何带或不带重音的字母?我想匹配带或不带重音的字母看看命名的Unicode字符块@Vitor.Batista.309:您收到的任何答案对您的问题有帮助吗?我使用了我的方法。很好。旁注:我非常确定,规范化的结果不仅仅是重音分解。因此,在生产中使用代码之前,请确保对其进行硬化处理,以考虑到所有其他分解的部分。@AlexeiLevenkov:是的,我还没有真正测试过它,所以应该谨慎使用。由于原始版本不起作用,我现在也对其进行了编辑。你找不到我以前使用过的原始字符。我认为您需要对字符串中的每个字符使用
规范化
。@Vitor.Batista.309:不知道为什么现在有一个扩展方法可以满足您的需要,所以它很复杂。如果您想包括例如扬抑重音(\u005E
),它也很容易扩展。我觉得这不是一个简单的方法。对不起,我知道这不太复杂,但真的谢谢您。