Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Regex.IsMatch查找是否有带重音符号的字母(é;、á;、à;,等等)_C# - Fatal编程技术网

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
),它也很容易扩展。我觉得这不是一个简单的方法。对不起,我知道这不太复杂,但真的谢谢您。