我正在尝试匹配一个字符串,看它是否只包含字母。应该允许各种信件。那么典型的a-zA-Z
,还有áàéèó...
等。
我尝试将其与以下正则表达式匹配:([\S])*
但是这也允许像\/<>*()...
等字符。这些字符显然不属于名称。当我只想要允许字母和“特殊”字母时,正则表达式是什么样的?
答案 0 :(得分:7)
对于非REGEX 解决方案,您可以使用char.IsLetter
指示指定的Unicode字符是否归类为 字母。
string str = "Abcáàéèó";
bool result = str.All(char.IsLetter);
这会为数字和false
等提供\/<>*()
结果。
答案 1 :(得分:6)
您可以使用完全相同的字符类:
\p{L}
所以正则表达式
^\p{L}+$
如果字符串仅包含字母,则将匹配。如果您希望组合字符,那么
^(\p{L}\p{M}*)+$
作品。
快速PowerShell测试:
PS> 'foo','bär','a.b','&^#&%','123','кошка' -match '^\p{L}+$'
foo
bär
кошка