我正在尝试匹配名称模式。名称可以是
lastname,firstname middleinitial
或
姓氏,名字
我正在尝试创建一个正则表达式来检查字符串的最后2个字符是[space] [anychar]
我在网上发现了一个教程,说要将A匹配到你所做的字符串的末尾
A$
"A" at the end of a line
在将此应用于我的时候,我试图做这样的事情,以及其中的一些形式。我完全不知道:/
([\\s][A-Za-z]$)
答案 0 :(得分: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空间。)
答案 1 :(得分:1)
抛弃括号并按照这样做:\s[A-Za-z]$
。
\s
代表“任何空格字符”,[A-Za-z]
代表“此子集中的任何字符:A-Za-z。”AZ“类似于”A到Z diapason的关键字“,但通常使用括号来表示”任何这些符号“。例如,模式[so]
将匹配任何字母 s 或 o 强>
您也可以通过在左括号后添加^
符号来反向执行此操作,以便模式匹配括号中出现不的任何字符。因此[^so]
将匹配 a , b ,!和所有其他符号,但不匹配 s 或 o 。
编辑:如果你想要匹配一个初始,“A-Z”可能不是最好的主意。使用unicode \p{L}
属性。
答案 2 :(得分:0)
您发布的正则表达式将匹配任何两个有空格和字母的字符串。
含义:
A
等
我不确定你到底想要匹配什么,所以很难评论它应该是什么,我建议你尝试使用正则表达式开发工具来让你的生活更轻松。
http://www.ultrapico.com/Expresso.htm
是我使用的(因为它是免费的),但那里有很多。
答案 3 :(得分:0)
此
/\s[A-Za-z]$/
等于'恰好匹配一个破碎空间和字符串末尾的集合A-Z或a-z中的一个字符($)'。
要测试lastname,firstname middlename
或lastname,firstname
,您可以使用量词来说出“应该匹配多少内容”:
/^.+,.+\s?.*$/
等于'从字符串开始(^),匹配任何字符(。),1次或多次(+)后跟一个逗号,后跟任何字符一次或多次,后跟零或一(?) )空格后跟任何字符零次或多次(*)到字符串结尾($)'。
以此为出发点,构建任何所需的复杂性。
答案 4 :(得分:0)
这些正则表达式应该可以解决问题。
\w+,\w+(?:\s\w+)?