【问题标题】:Regex FullName Pattern正则表达式全名模式
【发布时间】:2010-09-14 01:45:23
【问题描述】:

试图四处寻找全名的正则表达式模式,但似乎找不到。

理想情况下会匹配

Tom Franklin
tom Franklin
tom franklin
tom franklin-jones

即在中间允许 1 个空格和一些基本的连字符等,但仅此而已。有人知道怎么做吗?

编辑:包括

René Hadron van der Ööps

【问题讨论】:

  • 先生。奥布莱恩会对他的名字无效感到失望;)
  • 先生。 O'Brien 需要一个名字 :P 但是第二个名字是有效的!
  • 请不要通过粗略的正则表达式限制您认为“有效”的名称。 “Jim-Bob O'Reilly”只是“René Hadron van der Ööps”的开始......人们的名字中出现的字符和结构比你想象的要多得多。
  • @bobince,这就是我想要达到的目的,尽管你做得更好。
  • 这可能有助于阅读:kalzumeus.com/2010/06/17/…

标签: c# regex


【解决方案1】:

您可以使用/([\p{L}'-]+) ([\p{L}'-]+)/ 来捕获所有可能的字母。或/([a-z'-]+) ([a-z'-]+)/i 仅捕获 ascii 字母。

([\p{L}'-]+) 组表示[\p{L}'-] 至少重复了一次。 \p{L} 表示任何 unicode 字母。末尾的- 表示名称中允许使用“-”。

注意: 当您使用[] 捕获字符时,连字符必须位于字符集的开头或结尾。


编辑:

先生。奥布莱恩现在很开心。


资源:

【讨论】:

  • 感谢科林。是的,我正在使用 C# - 不喜欢 \w 和 \s - 给了我“无法识别的转义序列”
  • @Tom 记得通过写 "\\s" 或 @"\s" 来转义 \
  • 这不是 C# Tom - 是你。您必须转义反斜杠或在字符串前面加上 @ 即:string pattern = @"\w";
  • 在此代码中,您无法真正检测到“René Hadron van der Ööps”,因为您并不真正知道他的名字或姓氏是什么,而且我没有使用 \s,我建议你用它作为姓氏。
  • err 我似乎遇到了空间错误?即似乎即使我输入“汤姆琼斯” - 仍然给我我的错误文本“需要空格”
【解决方案2】:

\w+\s+[a-zA-Z-]+

【讨论】:

  • 嗨gamebit - 感谢您的回复。我正在使用 ascii,当我输入它时 - 不喜欢 \w 和 \s - 给我“无法识别的转义序列”
猜你喜欢
  • 2013-06-01
  • 1970-01-01
  • 2011-05-11
  • 2019-08-09
  • 2011-11-13
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多