2012-02-06 177 views
0

我正在尝试构建一个只匹配下面的string2的正则表达式。RegEx.Match不返回预期结果

串1:(ABC12:CPBI,OTCBB:CPBI)

串2:(ABC12:CPBI OTCF CPBI)

以下是我的C#代码

private static Regex rxSymbol = new Regex(@"(?<=:)[&/\w -]+\s*(?=\))", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); 

rxSymbol.IsMatch(ticker) 

isMatch语句返回对于string1为true。当我试图使用rxSymbol.Match(ticker)获得完全匹配时,这与“CPBI”匹配。

在我的代码中使用之前,我在RegexHero中测试了这个正则表达式。它在正则表达式英雄中正常工作。

有人可以帮我弄清楚我的正则表达式有什么问题。

更新:

我意识到的问题是什么: 我想要的正则表达式来仅在第一之间的文本返回true:和第一),此模式匹配:/ [&/\ W - ] + \ S */

在我的例子字符串(ABC12:CPBI,OTCBB:CPAA)有两个:和正则表达式是匹配第二之间的文本:和)

如何修改这个正则表达式来执行我的要求。

+0

必须转义正斜杠。你的表达式可以在你的示例字符串中找到:http://rubular.com/r/4ZFl3222jT,只是转义正斜杠。它应该/不应该做什么? – deltree 2012-02-06 17:10:27

+0

感谢您的评论。 C sharp正则表达式能够处理正斜杠而不会溢出。可能是因为正则表达式模式被包含在“”中,而不是在javascript中。但是你的红细胞样本帮助我意识到它与第二个结肠之间的文本匹配)。 – 2012-02-06 17:40:31

回答

2

这似乎做

(?<=\(\w+:)(\s*\w+)+(?=\)) 

我指定的第一部分(ABC12:\(\w+:的伎俩。我也用更具体的(\s*\w+)+替换了中间部分。

还请注意,在方括号内[],特殊字符失去其含义。每个角色都按原样拍摄。

+0

谢谢。它按预期工作。 – 2012-02-06 17:49:09