使用条件正则表达式
我有问题,我只能使用一个Regex.IsMatch
来验证字符串,我必须使用正则表达式来匹配相同的字符串,我看,似乎我可以使用正则表达式条件像(?(?=regex)then|else)
匹配的字符串值,这两个正则表达式,但我不能达到同样的效果使用条件正则表达式
我有两个正则表达式验证工作实际的代码是:
bool flag = false;
if (Regex.IsMatch(alias, "^[a-zñA-ZÑ_0-9-.]{6}[a-zñA-ZÑ_0-9-.]*$"))
{
if (Regex.IsMatch(alias, "[^0-9.-]+"))
{
flag = true;
};
};
,我想达到什么是像这样:
if (Regex.IsMatch(alias, "(?(^[a-zñA-ZÑ_0-9-.]{6}[a-zñA-ZÑ_0-9-.]*$)([^0-9.-]+))"))
{
// Some code...
};
所以如果你能给我一些指导,或者如果我正则表达式是正确的使用条件的正则表达式检查将赞赏
你的第一个正则表达式:
^[a-zñA-ZÑ_0-9-.]{6}[a-zñA-ZÑ_0-9-.]*$
说,0-9。 - 是允许的,而第二个说0-9 .-是不允许的。为什么不只是改变了第一个:
^[a-zñA-ZÑ_]{6}[a-zñA-ZÑ_]*$
和更简单:
^[a-zñA-ZÑ_]{6,}$
,因为这两个部分都是相等
[编辑 - 代码示例]
艾伦的回答可能是最优雅的,但你也可以这样做:
bool flag = false;
Match m = Regex.Match(alias, "(?<main>^[a-zñA-ZÑ_0-9-.]{6,}$)|(?<char>[^0-9.-])");
if (m.Groups["main"].Success && m.Groups["char"].Success)
{
flag = true;
};
也就是说,将正则表达式分解为多个部分通常会更好。它使它更具可读性,每个表达式都会做一件事。只要你一秒钟不执行一百万次表达式,运行多个正则表达式的开销就很小。
感谢,但事实是,我解析字符串可以有数字,但我必须验证它至少有一个字符不是数字,并且感谢简化符regexp – David 2010-08-12 20:37:06
当应用第二个正则表达式时,该字符串已经被第一个匹配,因此'[^ 0- 9 .-] +'只是确保字符串中至少有一个字符是字母或下划线而不是数字,点或短划线。 – 2010-08-13 03:04:39
@alan:true。一旦我到达电脑,我会解决我的答案。在我的手机上编写代码非常麻烦。 – 2010-08-13 08:04:50
你需要的是前瞻,而不是条件。注意:
^(?=.*[a-zñA-ZÑ_])[a-zñA-ZÑ_0-9.-]{6,}$
先行 - (?=.*[a-zñA-ZÑ_])
- 声称是在某个地方字符串中的字符列的至少一个。完成后,匹配位置返回到字符串的开头,所以“真正的”正则表达式可以匹配整个事物。
有关向前看符号的更多信息:http://www.regular-expressions.info/lookaround.html
如果你给我们,什么不能的你想匹配,而不是仅仅出现什么工作什么的例子可能会更好。很难从你发布的代码中知道你想要达到的目标。 – 2010-08-12 20:09:14
例如:有效期:12pl58,-sdfgl.fdo,-1313.5m64,Name_is_this 无效:娟,-1523.32,1523.3002 感谢您的帮助,帮助 – David 2010-08-12 21:05:06