我有一个字符串,我试图在C#中与Regex匹配。
字符串为Hello1004,"7"
。
我正在使用
创建正则表达式var reg = new Regex(@"hello\s*\[?\s*,?\s*(?<group1>\d+)\s*,\s*""(?<group2>[^""]+)""", RegexOptions.IgnoreCase);
([
之前可能有多个空格,,
或1004
。)
1004
可能并非总是1004
,但它始终是一个4位数字。
我想要的是:
1004
7
您可以看到Regex101演示here。
它在演示中完美运行,但在做
时foreach (var match in reg.Matches(text))
{
var group1 = match.Groups["group1"]?.Value;
var group2 = match.Groups["group2"]?.Value;
}
group1
为空,group2
中有1004
。如果我在Hello
和1004
之间放置一个空格,它在C#中工作正常。
任何人都可以解释为什么我这两者之间存在这种差异吗?
我正在使用Visual Studio 2017,.Net Framework 4。
答案 0 :(得分:0)
我猜你的问题是你太具体了。你要做的第一件事是匹配4位数,而不是匹配“......”的内容。所以你只需要这样说。除非您将它们用作锚点或验证,否则不要匹配您不需要的东西。
(?<group1>\d{4})[^"]*"(?<group2>[^"]*)
答案 1 :(得分:0)
我认为一个问题是在foreach函数中,C#没有确定从removeClass()
创建变量的返回类型。
我在C#VS2015中收到此错误
foreach( var match in reg.Matches(text) )
但是,如果更改为显式键入Program.cs(48,24,48,30): error CS1061: 'object' does not contain a definition for 'Groups' and no extension method 'Groups' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
,它会编译并运行,就像它的一样
应该。
Match
输出
var text = @"Hello1004,""7""";
var reg = new Regex(@"hello\s*\[?\s*,?\s*(?<group1>\d+)\s*,\s*""(?<group2>[^""]+)""", RegexOptions.IgnoreCase);
foreach (Match match in reg.Matches(text))
{
var group1 = match.Groups["group1"]?.Value;
var group2 = match.Groups["group2"]?.Value;
Console.WriteLine("{0} , {1}", group1, group2);
}