用正则表达式匹配和分割字符串
|
我想针对一个正则表达式验证输入字符串,然后将其拆分。
输入字符串可以是字母A和字母A后跟感叹号的任意组合。例如,以下是有效的输入字符串:A,A !、 AA,AA !、 A!A,A!A !、 AAA,AAA !、 AA!A,A!AA,...任何其他字符都应产生无效的比赛。
我的代码可能看起来像这样:
public string[] SplitString(string s)
{
Regex regex = new Regex(@\"...\");
if (!regex.IsMatch(s))
{
throw new ArgumentException(\"Wrong input string!\");
}
return regex.Split(s);
}
我的正则表达式应如何显示?
编辑-一些例子:
输入字符串\“ AAA \”,函数应返回3个字符串的数组(\“ A \”,\“ A \”,\“ A \”)
输入字符串\“ A!AAA!\”,函数应返回4个字符串的数组(\“ A!\”,\“ A \”,\“ A \”,\“ A!\”)
输入字符串“ AA!b \”,函数应抛出ArgumentException
没有找到相关结果
已邀请:
5 个回复
席酱
正则表达式不是一个好的计划的原因是,您可以用一些简单的if语句写出逻辑,这些if语句可以更快,更便宜地编译和运行函数。另外,Regex不太擅长为无限长度的字符串重复模式。您可能会写长的Regex或难以理解的内容。 编辑 在我的代码结尾,您将有一个带有拆分输入字符串的
,如您的问题中所述。或空的
。如果该要求对您非常重要,则可以稍作调整以引发ArgumentException。或者,您可以在列表上进行
来查看是否成功。
攫怂绵十
编辑: 使用http://gskinner.com/RegExr/之类的东西来处理正则表达式 评论后编辑: 好的,您已经更加清楚了自己想要什么。不要那样做。因为在执行操作时,您不能期望匹配整个输入然后进行拆分,因为它将像整个输入一样。对拆分部分使用单独的正则表达式,或者使用组获取匹配的值。 例:
同样,正则表达式并不总是答案。了解这可能如何影响您的应用程序。
剿畦缄饥小
瞥同忙接
尝试查看Espresso http://www.ultrapico.com/Expresso.htm或Rad Software正则表达式设计器http://www.radsoftware.com.au/regexdesigner/来设计和测试RE。
骂狮淋唐便
注意linq的使用-删除空白匹配项是必需的。