Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式提取所有模式_C#_.net_Regex - Fatal编程技术网

C# 使用正则表达式提取所有模式

C# 使用正则表达式提取所有模式,c#,.net,regex,C#,.net,Regex,我正在实现从特定字符串中提取模式。 模式应以列((表示Excel数据输入中的特定列)或单元格((表示Excel数据输入中的特定单元格)开头 输入字符串=“列(F)/100+单元格(B,2)/10” 预期输出:列(F),单元格(B,2) 源代码: List<string> result = new List<string>(); Regex patternParser = new Regex(@"(?:Column\()\S+\).+?|(?:Cell\()\S+\).

我正在实现从特定字符串中提取模式。 模式应以列((表示Excel数据输入中的特定列)或单元格((表示Excel数据输入中的特定单元格)开头

  • 输入字符串=“列(F)/100+单元格(B,2)/10”
  • 预期输出:列(F),单元格(B,2)
源代码:

List<string> result = new List<string>();
Regex patternParser = new Regex(@"(?:Column\()\S+\).+?|(?:Cell\()\S+\).+?", RegexOptions.Compiled | RegexOptions.IgnoreCase);
foreach (Match m in patternParser.Matches(VarEval))
{
     result.Add(m.Value);
}
列表结果=新列表();
Regex patternParser=newregex(@“(?:Column\()\S+\).+?\(?:Cell\()\S+\).+?”,RegexOptions.Compiled | RegexOptions.IgnoreCase);
foreach(在patternParser.Matches(VarEval)中匹配m)
{
结果:增加(m值);
}
我得到的结果是:列(F)/和单元格(B,2)/

您可以简单地执行此操作。请参阅演示

这里是:
(?i)(?:列|单元格)\([^()]+?\)

List result=Regex.Matches(“列(F)/100+单元格(B,2)/10”,
@“(?i)(?:列|单元格)\([^()]+?\)”)
.Cast()
.选择(m=>m.Value)
.ToList();

我不明白\b在这里的用法,你能详细解释一下吗?Tks.@Thinhbk
\b
是单词边界。它将禁止部分匹配,如
someColumn
randomeCell
。它将严格匹配这两个单词,以供你解释。如果你能回答这个愚蠢的问题,那将非常好:为什么问题中使用的模式不起作用?@Thinhbk如果您想要第一个实例并防止贪婪,请使用
(?:Column\()\S+?\)\124;(?:Cell\()\S+?\)
@Thinhbk:是的,您的正则表达式可以在没有
+?
的情况下进行输入,但我还想补充一点,建议的正则表达式中的第二个
\b
不是必需的,因为我们要匹配的下一个字符是
,一个非单词字符。此外,如果您有
列(F(a-V)),这个正则表达式将失败。
(它将只捕获
列(F(A-V)
,而不捕获最后一个
)。
\b(?:Column|Cell)\b\(.*?\)
List<string> result = Regex.Matches("Column(F)/100 + Cell(B,2)/10",
                                    @"(?i)(?:Column|Cell)\([^()]+?\)")
                           .Cast<Match>()
                           .Select(m=>m.Value)
                           .ToList();