[英]Regex to extract string between quotes
我正在尝试提取两个引号之间的字符串,并且我以为我的正则表达式可以正常工作,但是它在我的GroupCollection中给了我两个字符串,而我不能让它忽略第一个,包括第一个引号和ID =
我要解析的字符串是
测试ID =“ 12345”你好
我想返回一组12345,以便以后可以在代码中对其进行操作。 我已经尝试使用以下正则表达式: http : //regexr.com/3bgtl ,使用以下代码:
nodeValue = "Test ID=\"12345\" hello";
GroupCollection ids = Regex.Match(nodeValue, "ID=\"([^\"]*)").Groups;
问题在于GroupCollection包含两个条目:
ID =“12345
12345
我只希望它返回第二个。
使用正向后看运算符:
GroupCollection ids = Regex.Match(nodeValue, "(?<=ID=\")[^\"]*").Groups;
您还使用了一个捕获组(括号),这就是为什么您获得2个结果的原因。
有几种方法可以完成此操作。 我喜欢命名捕获组以提高可读性。
具有命名捕获组的正则表达式:
"(?<capture>.*?)"
您的代码将是:
match.Groups["capture"].Value
您的代码完全可以,并且在这里建议的所有解决方案中都是最有效的。 捕获组允许以最快,最省资源的方式匹配较大文本中的子字符串。
您只需使用正则表达式访问捕获的由圆括号定义的组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]属性中检索单个子表达式,并将其与整个匹配文本分开进行处理。
请注意, 如果不需要重叠的匹配 ,则捕获组机制是此处的最佳解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.