2011-02-28 104 views
1

我想匹配名称模式。一个名字可以是基本的正则表达式帮助

姓氏,名字middleinitial

姓氏,名字

我试图创建一个正则表达式来检查的最后2个字符的字符串是[空格] [anychar]

我发现了一个在线教程它说来匹配字符串的结尾你做

A$ 

"A" at the end of a line 

在将其应用到我的我试图做这样的事情,和许多的这种形式了。我从字面上不知道虽然:/

([\\s][A-Za-z]$) 

回答

4

您可以轻松地检查最后两个字符而不使用正则表达式。

bool hasMiddleInitial = false; 
if (name.Length > 1 && 
    name[name.Length-2] == ' ' && 
    char.IsLetter(name, name.Length-1)) 
{ 
    hasMiddleInitial = true; 
} 

这是更清晰(更可读),也比正则表达式执行速度更快。它使你不必担心非英文字母(A-Z是一个非常有限的集合!)。

(PS你也可以使用char.IsWhiteSpace,而不是直接比较' ';然后,将与其他空格字符工作过。例如,亚洲用户有可能进入一个U + 3000表意空间,而不是标准的U + 0020空间)。

+0

正确回答不是因为你给的代码,而是因为我放弃了试图做到没有正则表达式因为我没有没有正确的库函数。 char.isLetter - 永远不会知道:D。谢谢 – rik 2011-02-28 11:34:38

0

您发布的正则表达式匹配任何两个字符的字符串,有一个空格和一个字母。

含义:

一个

我不知道你究竟想匹配,所以很难在它应该是什么评论,我可以建议你可以尝试一个正则表达式开发工具,让你的生活变得更轻松。

http://www.ultrapico.com/Expresso.htm

是一个我使用(因为它是免费的),但有一吨在那里。

+0

模拟匹配给定字符串的最后2个字符,[空格] [任意字符从a-z] – rik 2011-02-28 11:24:36

1

沟渠括号,并像这样做:\s[A-Za-z]$

\s代表“任何空格字符”,[A-Za-z]代表“该子集中的任何字符:A-Za-z。”AZ“类似于”A到Z diapason“的关键字,但通常使用括号说类似“这些符号”。例如,模式[so]将匹配任何英文字母或者是小号Ø

你也可以做反向通过开后加入^符号所以模式匹配的任何字符不是出现在括号中。所以[^so]将匹配a,b,和所有其他符号,但不会匹配so

编辑:如果你想匹配一个初始的,“A-Z”可能不是最好的主意。使用unicode \p{L}属性。

+0

我有多接近我可以告诉我将来的参考括号是做什么的?谢谢 – rik 2011-02-28 11:29:01

+0

如果中间的初始值是?或者?这个解决方案非常麻烦。 – Timwi 2011-02-28 11:30:07

+0

即时通讯不知道数据库会允许该字符集吗?如果这有什么区别,字段类型是varchar2(1字节)? – rik 2011-02-28 11:31:30

0

/\s[A-Za-z]$/ 

相当于“来自该组A-Z或A-Z严丝合缝一个断裂的空间和一个字符在字符串($)”的端部。

为了测试lastname,firstname middlenamelastname,firstname你会使用量词说“有多少应该怎样匹配”:(。)

/^.+,.+\s?.*$/ 

这相当于“从字符串(^),匹配任何字符的开始,一个或多个(+)后面紧跟一个逗号,后跟任意一个或多个字符,后跟零个或一个(?)空格,后跟任意字符零次或多次(*)结束字符串($)' 。

以此为起点,构建任何所需的复杂性。

+0

一个markdown评论会很好... – dianovich 2011-02-28 11:44:40

0

这些正则表达式应该可以做到。 \w+,\w+(?:\s\w+)?