我想要一个匹配“Johnson”、“Del Sol”或“Del La Range”的 C# 正则表达式;换句话说,它应该匹配中间有空格但开头或结尾没有空格的单词。
Caveatrob
问问题
12626 次
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 回答