Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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#_Regex - Fatal编程技术网

C# 正则表达式提取引号之间的字符串

C# 正则表达式提取引号之间的字符串,c#,regex,C#,Regex,我试图在两个引号之间提取一个字符串,我以为我的正则表达式可以工作,但它在我的GroupCollection中给了我两个字符串,我不能让它忽略第一个字符串,其中包括第一个引号和ID= 我要分析的字符串是 测试ID=12345你好 我想在一个组中返回12345,以便以后可以在代码中操作它。我使用以下代码尝试了以下正则表达式:: nodeValue = "Test ID=\"12345\" hello"; GroupCollection ids = Regex.

我试图在两个引号之间提取一个字符串,我以为我的正则表达式可以工作,但它在我的GroupCollection中给了我两个字符串,我不能让它忽略第一个字符串,其中包括第一个引号和ID=

我要分析的字符串是

测试ID=12345你好

我想在一个组中返回12345,以便以后可以在代码中操作它。我使用以下代码尝试了以下正则表达式::

nodeValue = "Test ID=\"12345\" hello";
GroupCollection ids = Regex.Match(nodeValue, "ID=\"([^\"]*)").Groups;
问题在于GroupCollection包含两个条目:

ID=12345

12345


我只希望它返回第二个。

使用正向查找运算符:

GroupCollection ids = Regex.Match(nodeValue, "(?<=ID=\")[^\"]*").Groups;

您还使用了一个捕获组作为括号,这就是为什么会得到两个结果。

有几种方法可以实现这一点。为了可读性,我喜欢命名的捕获组

具有命名捕获组的正则表达式:

"(?<capture>.*?)"

您的代码完全正常,并且是这里建议的所有解决方案中最有效的。捕获组允许以最快、消耗资源最少的方式匹配较大文本中的子字符串

使用正则表达式只需访问由圆括号定义的捕获组1。像这样:

var nodeValue = "Test ID=\"12345\" hello";
GroupCollection ids = Regex.Match(nodeValue, "ID=\"([^\"]*)").Groups;
Console.WriteLine(ids[1].Value);
// or just on one line
// Console.WriteLine(Regex.Match(nodeValue, "ID=\"([^\"]*)").Groups[1].Value);

请看一看:

分组构造描述正则表达式的子表达式并捕获输入字符串的子字符串。可以使用分组构造执行以下操作:

匹配在输入字符串中重复的子表达式。 将量词应用于具有多个正则表达式语言元素的子表达式。有关量词的更多信息,请参见[正则表达式中的量词][3]。 在[Regex.Replace][4]和[Match.Result][5]方法返回的字符串中包含子表达式。 从[Match.Groups][6]属性中检索单个子表达式,并将其作为一个整体与匹配的文本分开处理。
请注意,如果您不需要重叠匹配,捕获组机制是这里的最佳解决方案。

您需要打印组1。这非常有效,感谢您的快速响应。我使用的是组,因为我相信在某些情况下,ID的实例不止一个,而且它实际上在稍后被传递到替换中。
var nodeValue = "Test ID=\"12345\" hello";
GroupCollection ids = Regex.Match(nodeValue, "ID=\"([^\"]*)").Groups;
Console.WriteLine(ids[1].Value);
// or just on one line
// Console.WriteLine(Regex.Match(nodeValue, "ID=\"([^\"]*)").Groups[1].Value);