6

我想要一个匹配“Johnson”、“Del Sol”或“Del La Range”的 C# 正则表达式;换句话说,它应该匹配中间有空格但开头或结尾没有空格的单词。

4

7 回答 7

5
^\p{L}+(\s+\p{L}+)*$

此正则表达式具有以下功能:

  • 将匹配一个字母的姓氏(例如 Malcolm X 的姓氏)
  • 将不匹配包含数字的姓氏(如带有 a\w或 a [^ ]will 的任何东西)
  • 匹配 unicode 字母

但是像“O'Connor”这样的姓氏或连字符的姓氏呢......嗯......

于 2009-03-10T21:33:49.033 回答
3

这应该做的工作:

^[a-zA-Z][a-zA-Z ]*[a-zA-Z]$

编辑:这是一个轻微的改进,允许在名称中使用后一个名称和连字符/撇号:

^[a-zA-Z'][a-zA-Z'- ]*[a-zA-Z']?$
于 2009-03-10T21:26:39.330 回答
3

在名称“Ṣalāḥ ad-Dīn Yūsuf ibn Ayyūb”(参见http://en.wikipedia.org/wiki/Saladdin)中,哪个是名字,哪个是最后一个?以“Roberto Garcia y Vega”(发明)的名义怎么样?“蒋介石”(见http://en.wikipedia.org/wiki/Chang_Kai-shek)?

名称中的空格是您最少的问题!请参阅全局应用程序中的个人姓名:要存储的内容

于 2009-03-10T21:46:38.317 回答
0

这 ?限定符是你的朋友。进行最短可能匹配而不是贪婪匹配。将其用作名字,如下所示:

^(.+?) (.+)$

第 1 组抓取第一个空间之前的所有内容,第 2 组获得其余部分。

当然,现在如果名字包含空格怎么办?

于 2009-03-10T21:21:33.727 回答
0

尝试这样的事情:

^[^\s][\w\s]*[^\s]$
于 2009-03-10T21:25:20.630 回答
0

这是一个更好的:

/^[a-zA-Z]+(([\'\,\.\- ][a-zA-Z ])?[a-zA-Z]*)*$/

允许标准标点符号和空格,但不能以标点符号开头。

于 2012-05-10T16:31:54.387 回答
-1

我认为这更符合您的要求:

^[^ ][a-zA-Z ]+[^ ]$

这应该匹配行的开头,没有空格、字母字符或空格,并且结尾没有空格。

这适用于 irb,但上次我使用 C# 时,我使用了类似的正则表达式:

(零表示好,nil 表示失败)

>> "Di Giorno" =~ /^[^ ][a-zA-Z ]+[^ ]$/
=> 0
>> "DiGiorno" =~ /^[^ ][a-zA-Z ]+[^ ]$/
=> 0
>> " DiGiorno" =~ /^[^ ][a-zA-Z ]+[^ ]$/
=> nil
>> "DiGiorno " =~ /^[^ ][a-zA-Z ]+[^ ]$/
=> nil
>> "Di Gior no" =~ /^[^ ][a-zA-Z ]+[^ ]$/
=> 0
于 2009-03-10T21:35:16.313 回答