RegEx.Match未返回预期结果

时间:2012-02-06 17:07:17

标签: c# regex

我正在尝试构建一个只与下面的string2匹配的正则表达式。

字符串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:/ [&amp; / \ w - ] + \ s * /

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

如何修改此正则表达式以强制执行我的要求。

1 个答案:

答案 0 :(得分:2)

这似乎可以解决问题

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

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

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