C# 只允许字母和;特别";通过正则表达式的字母(é;è;à;等)

C# 只允许字母和;特别";通过正则表达式的字母(é;è;à;等),c#,regex,C#,Regex,我试图匹配一个字符串,看看它是否只由字母组成。所有种类的信件都应该被允许。因此,典型的a-zA-Z,但也有aaaáèó…等 我尝试将其与以下正则表达式匹配:([\S])* 但这也允许使用诸如\/*()…等字符。这些字符显然不属于名称。当我只想允许字母和“特殊”字母时,正则表达式是什么样子的?您可以使用character类,它确切地说明: \p{L} 所以正则表达式 ^\p{L}+$ 如果字符串仅由字母组成,则将匹配。如果您希望组合字符,那么 ^(\p{L}\p{M}*)+$ 工作 快速Po

我试图匹配一个字符串,看看它是否只由字母组成。所有种类的信件都应该被允许。因此,典型的
a-zA-Z
,但也有
aaaáèó…

我尝试将其与以下正则表达式匹配:
([\S])*


但这也允许使用诸如
\/*()…
等字符。这些字符显然不属于名称。当我只想允许字母和“特殊”字母时,正则表达式是什么样子的?

您可以使用character类,它确切地说明:

\p{L}
所以正则表达式

^\p{L}+$
如果字符串仅由字母组成,则将匹配。如果您希望组合字符,那么

^(\p{L}\p{M}*)+$
工作

快速PowerShell测试:

PS> 'foo','bär','a.b','&^#&%','123','кошка' -match '^\p{L}+$'
foo
bär
кошка

对于非正则表达式的解决方案,您可以使用

指示指定的Unicode字符是否分类为 字母


这将为数字和
\/*()
等提供
false
结果。

可能的重复,因为如果它在C和Javascript中工作,它不会只在C中工作?但是,好的,那么这个:,它也说“使用\w+”
所有种类的字母都应该被允许
:这是否意味着你也希望允许使用中文、韩文、泰文等字符?CodeCaster,
\w
对于几乎所有现实世界的使用都是可怕的。它允许字母、数字和下划线,在许多正则表达式引擎中,它不支持Unicode,实际上只匹配ASCII。三十年前,它被认为是在通用编程语言中匹配标识符的一种简陋的快捷方式(猜测),对于处理实际文本来说,它是一个糟糕且几乎无用的选择。而且,基于
\w
\b
属于几乎无用的一类。CodeCaster,我收回前面的评论。他们实际上需要一个同时在C#和JavaScript中工作的正则表达式,但从问题上看这并不明显(或者他们当时甚至不知道)。请注意,这允许使用任何语言的字母(中文、韩文等),而不仅仅是基于拉丁语的脚本。+1作为附加信息NHAHDH:是的,这就是我所理解的,当他们说»所有种类的信件都应该被允许«。这是如何处理代孕的?也就是说,像U+0065U+0301(“e”+“组合急性重音”=é)这样的东西匹配吗?(它在OSX'
grep
,我在这里特别要求.NET)康拉德,这些不是代理;他们在组合角色。但它在这些方面失败了;我会解决的。因为他们试图使用一个允许正则表达式验证的工具来验证东西,我想非正则表达式的解决方案不会真正起作用。由于优雅,我之前仍然给了你+1,尽管它仍然无法组合角色(就像我最初的解决方案一样)。
string str = "Abcáàéèó";
bool result = str.All(char.IsLetter);