通过正则表达式只允许字母和"特殊"字母(éèà等)

Viv*_*ndi 6 c# regex

我正在尝试匹配一个字符串,看它是否只包含字母.应该允许各种信件.所以典型a-zA-Z,但也áàéèó...

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

但是这也允许字符等\/<>*()....这些显然是不属于名称的字符.当我只想要允许字母和"特殊"字母时,正则表达式是什么样的?

Hab*_*bib 7

对于非REGEX解决方案,您可以使用char.IsLetter

Char.IsLetter方法

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

string str = "Abcáàéèó";
bool result = str.All(char.IsLetter);
Run Code Online (Sandbox Code Playgroud)

这将给出false数字\/<>*()等的结果.


Joe*_*oey 6

您可以使用准确说明的字符类:

\p{L}
Run Code Online (Sandbox Code Playgroud)

所以正则表达式

^\p{L}+$
Run Code Online (Sandbox Code Playgroud)

如果字符串只包含字母,则匹配.如果你期望组合字符,那么

^(\p{L}\p{M}*)+$
Run Code Online (Sandbox Code Playgroud)

作品.

快速PowerShell测试:

PS> 'foo','bär','a.b','&^#&%','123','?????' -match '^\p{L}+$'
foo
bär
?????
Run Code Online (Sandbox Code Playgroud)

  • 这如何处理代理人?即做一些像U + 0065 U + 0301(="e"+"COMBINING ACUTE ACCENT"=é)匹配?(它适用于OS X'`grep`,我在这里专门讨论.NET.) (2认同)
  • 康拉德,那些不是代理人; 他们结合了人物.但它失败了; 我会解决它. (2认同)