我正在尝试构建一个只与下面的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)中,有两个:
,正则表达式与第二个之间的文本匹配:和)
如何修改此正则表达式以强制执行我的要求。
答案 0 :(得分:2)
这似乎可以解决问题
(?<=\(\w+:)(\s*\w+)+(?=\))
我使用(ABC12:
指定了第一部分\(\w+:
。我还用更具体的(\s*\w+)+
替换了中间部分。
另请注意,在方括号[
]
中,特殊字符会失去意义。每个角色都按原样拍摄。