C# 使用前缀和后缀匹配多个模式的正则表达式
我有一根这样的绳子 这是(锁定)项目响应(解锁)和(锁定)请求(解锁) 我需要得到前缀(Lock)和后缀(Unlock)之间的所有字符串 我需要去C# 使用前缀和后缀匹配多个模式的正则表达式,c#,regex,C#,Regex,我有一根这样的绳子 这是(锁定)项目响应(解锁)和(锁定)请求(解锁) 我需要得到前缀(Lock)和后缀(Unlock)之间的所有字符串 我需要去 项目响应 请求 我在c#工作,并尝试了以下方法 (?:(锁定))(.*)(?:(解锁)) (?正则表达式:(?:\(Lock\)(.*?(:\(Unlock\) C#中的示例代码: var r=newregex(@“(?:\(Lock\)(.*?(:\(Unlock\))”); MatchCollection mc=r.Matches(“这是(锁)项
(?:\(Lock\)(.*?(:\(Unlock\)
C#中的示例代码:
var r=newregex(@“(?:\(Lock\)(.*?(:\(Unlock\))”);
MatchCollection mc=r.Matches(“这是(锁)项响应(解锁)和(锁)请求(解锁)”;
对于(int i=0;i
结果:
你需要让它成为非贪婪的
*?
你能检查我的答案,看看它是否符合你的要求吗?@zackraiyan:谢谢你的回答,先生,但我正在寻找一种更通用的方法,而不是适用于这个确切的字符串的方法,但是如果你有(锁定)
,(解锁)我的解决方案为什么不起作用呢
在.NET正则表达式中的ur字符串中,(?>([^(]*)在(.*)的位置看起来很好。然后完整正则表达式将是(?([^(]*)(?=(Unlock\)\%28Lock\%29%29%28%3f%3E%28[^%28]*%29%28%3f%3d\%28Unlock\%29&i=This+is+a+%28Lock%29项目+响应%28Unlock%29+和+%28Lock%29请求%28Unlock%29%29
var r = new Regex(@"(?:\(Lock\))(.*?)(?:\(Unlock\))");
MatchCollection mc = r.Matches("This is a (Lock)item response(Unlock) and (Lock)request(Unlock)");
for(int i = 0; i < mc.Count; i++)
{
// Groups[0] always contains the whole match
// Groups[1] contains the capturing match
Console.WriteLine(mc[i].Groups[1].Value);
}