2013-03-15 156 views
0

在C#中,我有两个字符串:[I/text][S/100x20]检查表达式是否与正则表达式匹配

所以,第一个是[I/,后面是文本,最后是]

,第二个是,随后的整数,然后x,然后另一个整数[S/,并在结束]

我需要检查给定的字符串是否与其中一种格式匹配。我试过如下:

(?<word>.*?) and (?<word>[0-9]x[0-9]) 

但是这似乎并没有工作,我错过了[I/...][S/...]部分。

我该怎么做?

回答

0

遵循正则表达式来做到这一点。匹配整个字符串

"(\[I/\w+\])|(\[S/\d+x\d+\])" 
+2

玩我想你混淆了两个例子。 S /后面跟数字 – bjoern 2013-03-15 15:50:22

+0

@ bjoern谢谢。固定。 – Oleg 2013-03-15 16:05:36

0

这应该很好做:如果[I/text]文本应该只包含字母数字字符,然后@奥列格的使用\w代替[^\]]的效果会更好

Regex rex = new Regex(@"\[I/[^\]]+\]|\[S/\d+x\d+\]"); 

。同样使用+表示需要至少有一个前面的字符类,并且允许类是可选的。根据需要调整..

及用途:

string testString1 = "[I/text]"; 
if(rex.IsMatch(testString1)) 
{ 
    // should match.. 
} 

string testString2 = "[S/100x20]"; 
if(rex.IsMatch(testString2)) 
{ 
    // should match.. 
} 
+0

我相信应该有\ d +作为int是必需的。并且在我/应该是\ w +之后才能匹配文本字符。 – Oleg 2013-03-15 15:47:47

+0

是的。你对'\ d +'说得对。我不确定_text_应该包含什么,这就是为什么我把它留作''[^ \]]' – 2013-03-15 15:51:05

+0

从技术上讲,'*'不应该是'+',因为(基于我如何阅读OP )“文本”预计会在那里? – 2013-03-15 15:51:09

0

([I/\ W +]) (S/\ d + X \ d +])

上述作品。

使用http://regexr.com?34543用你的表情

+0

[so]有很好的[代码格式](http://stackoverflow.com/editing-help#code);请拿它的优点。另外,你的第二个正则表达式缺少开放'['。 – 2013-03-16 06:46:12