繁体   English   中英

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

[英]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);

IDEONE演示

请看一下正则表达式中的分组构造

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

  • 匹配在输入字符串中重复的子表达式。
  • 将量词应用于具有多个正则表达式语言元素的子表达式。 有关量词的更多信息,请参见[正则表达式中的量词] [3]。
  • 在[Regex.Replace] [4]和[Match.Result] [5]方法返回的字符串中包含一个子表达式。
  • 从[Match.Groups] [6]属性中检索单个子表达式,并将其与整个匹配文本分开进行处理。

请注意, 如果不需要重叠的匹配 ,则捕获组机制是此处的最佳解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM