正则表达式只匹配字母

Nik*_*ike 342 regex language-agnostic letter

如何编写仅与字母匹配的正则表达式?

Gum*_*mbo 361

使用字符集:[a-zA-Z]匹配A-Z中的小写和大写字母.[a-zA-Z]+匹配一个或多个字母和^[a-zA-Z]+$仅仅包括一个或多个字母(字符串匹配^$标记开始和分别的字符串的末尾).

如果你想匹配除A-Z之外的其他字母,你可以将它们添加到字符集:[a-zA-ZäöüßÄÖÜ].或者您使用预定义的字符类,如Unicode字符属性\p{L},它描述字母的Unicode字符.

  • 这是一个非常以ASCII为中心的解决方案.这将打破几乎任何非英语文本. (93认同)
  • 已经打破了90%的德语文本,甚至没有提到法语或西班牙语.意大利人可能仍然会做得很好. (11认同)
  • 这取决于你选择的"拉丁字符"的定义.根据你的定义,J,U,Ö,Ä都可以被认为是拉丁字符.但它们都用于使用"拉丁字母"进行书写的语言中. (8认同)
  • @Joachim Sauer:它宁可打破使用非拉丁字符的语言. (7认同)
  • \ p {L}匹配所有的变音符号sedilla重音等,所以你应该去那. (7认同)
  • 您可以使用: ^[a-zA-Z]\p{L}+$ 来包含大多数西方字母,而不是像添加 äöüßäÖÜ 这样不断添加字符。 (2认同)

Rob*_*obV 178

\p{L} 如果您对拉丁语以外的字母表感兴趣,则匹配任何Unicode字母

  • **JavaScript** 在正则表达式之后需要 `u` 来检测 unicode 组:`/\p{Letter}/gu` (11认同)
  • @Philip Potter:Ruby使用完全相同的语法支持Unicode字符属性. (6认同)
  • 我认为这应该是`\ p {L}\p {M}*+`来涵盖由多个代码点组成的字母,例如一个字母后跟重音符号.根据http://www.regular-expressions.info/unicode.html (6认同)
  • 那么在任何支持unicode正则表达式的正则表达式引擎中都可以 (3认同)
  • [本页](http://www.regular-expressions.info/refflavors.html)建议只有java,.net,perl,jgsoft,XML和XPath正则表达式支持\ p {L}.但主要遗漏:python和ruby(虽然python有正则表达式模块). (3认同)
  • 并非所有正则表达式风格。例如,vim 正则表达式将 `\p` 视为“可打印字符”。 (2认同)
  • 不适用于.Net中的梵语 (2认同)

Kri*_*ols 43

根据你的"角色"的含义:

[A-Za-z]- 所有字母(大写和小写)

[^0-9] - 所有非数字字符

  • 嗯,á,ã,Ö,Ä...也是字母,অ,আ,ই,ঈ,Є,Ж,З,ح,خ,دא,ב,ג,ש,ת等...... https://en.wikipedia.org/wiki/Letter_%28alphabet%29 (15认同)
  • @CatalinaChircu 编码在这里绝对不相关。编码是一种以二进制形式对字符集中的代码点进行编码的方法,例如 UTF-8 是 Unicode 的编码。字母 OTOH 取决于语言,如果有人说“[A-Za-z]”是字母,则必须指定正在使用的语言 (2认同)

blu*_*ote 29

最接近的选项是

[\u\l]+
Run Code Online (Sandbox Code Playgroud)

它匹配大写和小写字母的序列.但是,并非所有编辑器/语言都支持它,因此使用它可能更安全

[a-zA-Z]+
Run Code Online (Sandbox Code Playgroud)

正如其他用户所说

  • 虽然不会匹配任何特殊字符。 (2认同)

小智 15

你会用的

/[a-z]/gi
Run Code Online (Sandbox Code Playgroud)

[] - 检查给定输入之间的任何字符

az ---涵盖整个字母表

g -----遍布整个字符串的全局

我-----得到大写和小写


小智 13

很少有人写成"/ ^ [a-zA-Z] $/i"的正则表达式是不正确的,因为最后他们提到/ i是不区分大小写的,并且在第一次匹配后它将返回.而不是/我只使用/ g这是全局的,你也没有任何需要把^ $用于开始和结束.

/[a-zA-Z]+/g
Run Code Online (Sandbox Code Playgroud)
  1. [a-z _] +匹配下面列表中的单个字符
  2. 量词:+在一次和无限次之间,尽可能多次,根据需要回馈
  3. az a和z之间范围内的单个字符(区分大小写)
  4. AZ是A和Z之间范围内的单个字符(区分大小写)
  5. g修饰符:全局.所有比赛(首场比赛不返回)


Roh*_*bey 11

对于PHP,以下将正常工作

'/^[a-zA-Z]+$/'
Run Code Online (Sandbox Code Playgroud)


Sco*_*iff 10

/[a-zA-Z]+/
Run Code Online (Sandbox Code Playgroud)

超级简单的例子.正则表达式非常容易在线查​​找.

http://www.regular-expressions.info/reference.html


小智 9

Java的:

String s= "abcdef";

if(s.matches("[a-zA-Z]+")){
     System.out.println("string only contains letters");
}
Run Code Online (Sandbox Code Playgroud)

  • 它不包含变音符号,例如“ŹŻŚĄ” (3认同)

Jav*_*zán 8

所以,我读了很多答案,其中大多数都没有考虑例外情况,比如带有重音符号或分音符的字母(\xc3\xa1、\xc3\xa0、\xc3\xa4 等) .)。

\n

我在打字稿中创建了一个函数,它应该可以很好地推广到任何可以使用 RegExp 的语言。这是我在 TypeScript 中的用例的个人实现。我基本上所做的就是添加字母范围和我想要添加的每种符号。在应用 RegExp 之前,我还将字符转换为大写,这节省了我一些工作。

\n
function isLetter(char: string): boolean {\n  return char.toUpperCase().match(\'[A-Z\xc3\x80-\xc3\x9a\xc3\x84-\xc3\x9c]+\') !== null;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果您想添加具有另一种重音的另一个字母范围,只需将其添加到正则表达式中即可。特殊符号也是如此。

\n

我使用 TDD 实现了此功能,并且我可以确认此功能至少适用于以下情况:

\n
    character | isLetter\n    ${\'A\'}    | ${true}\n    ${\'e\'}    | ${true}\n    ${\'\xc3\x81\'}    | ${true}\n    ${\'\xc3\xbc\'}    | ${true}\n    ${\'\xc3\xb9\'}    | ${true}\n    ${\'\xc3\xbb\'}    | ${true}\n    ${\'(\'}    | ${false}\n    ${\'^\'}    | ${false}\n    ${"\'"}    | ${false}\n    ${\'`\'}    | ${false}\n    ${\' \'}    | ${false}\n
Run Code Online (Sandbox Code Playgroud)\n


Sła*_*art 6

如果您指的是任何字符编码中的任何字母,那么一个好的方法可能是删除非字母,例如空格\s、数字\d和其他特殊字符,例如:

[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]
Run Code Online (Sandbox Code Playgroud)

或者使用上述否定的否定来直接描述任何字母:

\S \D and [^  ..special chars..]
Run Code Online (Sandbox Code Playgroud)

优点:

  • 适用于所有正则表达式风格。
  • 写起来很容易,有时可以节省很多时间。

缺点:

  • 很长,有时并不完美,但字符编码也可能被破坏。


Aga*_*her 6

只需使用\w[:alpha:].它是一个转义序列,只匹配可能出现在单词中的符号.

  • 在所有情况下,`\ w`可能不是一个好的解决方案.至少在PCRE中,`\ w`也可以匹配其他字符.引用[PHP手册](http://uk3.php.net/manual/en/regexp.reference.escape.php):"*"单词"字符是任何字母或数字或下划线字符,即任何可以成为Perl"单词"一部分的字符.字母和数字的定义由PCRE的字符表控制,如果发生特定于语言环境的匹配,则可能会有所不同.例如,在"fr"(法语)语言环境中,一些大于128的字符代码用于重音字母,这些字符代码由\ w.*"匹配. (7认同)
  • `\ w`表示匹配字母和数字 (2认同)

小智 6

使用字符组

\D
Run Code Online (Sandbox Code Playgroud)

匹配除数字0-9之外的任何字符

^\D+$
Run Code Online (Sandbox Code Playgroud)

这里的例子

  • 这也将匹配空白,符号等,这似乎不是问题所要求的. (7认同)

小智 6

在 python 中,我发现以下方法可以工作:

[^\W\d_]
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为我们正在创建一个新的字符类 (the []),它^从类中排除 ( ) 任何字符\W(不在 中的所有字符[a-zA-Z0-9_]),还排除任何数字 ( \d) 并排除下划线 ( _)。

也就是说,我们采用了字符类[a-zA-Z0-9_]并删除了0-9_位。你可能会问,那不是更容易写吗[a-zA-Z],而不是[^\W\d_]?如果只处理 ASCII 文本,你会是正确的,但在处理 unicode 文本时:

\W

匹配任何不是单词字符的字符。这与\w相反。> 如果使用 ASCII 标志,则这相当于 [^a-zA-Z0-9_]。

^ 来自python re 模块文档

也就是说,我们将所有被认为是 unicode 中的单词字符,删除所有被认为是 unicode 中的数字字符,并删除下划线。

例如,下面的代码片段

import re
regex = "[^\W\d_]"
test_string = "A;,./>>?()*)&^*&^%&^#Bsfa1 203974"
re.findall(regex, test_string)
Run Code Online (Sandbox Code Playgroud)

退货

['A', 'B', 's', 'f', 'a']
Run Code Online (Sandbox Code Playgroud)


Mot*_*lab 5

您可以尝试这个正则表达式:[^\W\d_][a-zA-Z]

  • `[^ab]` 表示不是 `a` 也不是 `b`。`[^a|b]` 表示不是 `a` 也不是 `|` 也不是 `b`。举第二个例子 `[a|b|c|d]` 与 `[abcd|||]` 完全相同,而 `[abcd|||]` 又与 `[abcd|]` 完全相同 - 所有这些都等同于 `([ a]|[b]|[c]|[d]|[|])` 中的 `|` 是文字字符,而不是 OR 运算符。OR 运算符隐含在字符类中的每个字符之间,放置实际的“|”意味着您希望该类接受“|”(管道)字符。 (12认同)

cbl*_*npa 5

最近,我在表单中使用了这种模式来检查人名,其中包含字母、空格和特殊字符(例如重音符号)。

\n\n
pattern="[A-z\xc3\x80-\xc3\xba\\s]+"\n
Run Code Online (Sandbox Code Playgroud)\n