c# - 有没有办法使用正则表达式来分割 I[1,2]?

标签 c# regex

我正在使用 C# 从 XML 文件中提取字符串,并且需要 "I[1,2]" 中的第二个数字,即 2

  Regex regex = new Regex(@"\[.*?\]");
  MatchCollection matches = regex.Matches(inputChannel.Value);

  var result = matches[0].Value.Split().Where(x => x.StartsWith("[") && x.EndsWith("]"))
                 .Select(x => x.Replace("[", string.Empty).Replace("]", string.Empty))
                 .ToList();

其中inputChannel.value =“I[1;2]”

此代码获取两个数字并将它们粘贴到一个列表中,但是有没有办法拆分这两个数字并将它们放入一个列表中?

最佳答案

您可以使用捕获组来获取第二个数字,而不是使用拆分。

I\[[0-9]+;([0-9]+)]
  • I\[匹配I[
  • [0-9]+;匹配 1+ 位数字 0-9 和 ;
  • ([0-9]+)捕获第1组,匹配1+数字0-9
  • ]匹配 ]字符

查看regex demo .

string pattern = @"I\[[0-9]+;([0-9]+)]";
string input = @"I[1;2]";        
Match m = Regex.Match(input, pattern); 
Console.WriteLine(m.Groups[1].Value); // 2

或者使用环视:

(?<=I\[[0-9]+;)[0-9]+(?=])
  • (?<=I\[[0-9]+;)正向回顾,断言 I[ , 1+ 位数字后跟 ;向左
  • [0-9]+匹配 1+ 位数字 0-9
  • (?=])正向前瞻,断言 ]向右

查看另一个regex demo .

string pattern = @"(?<=I\[[0-9]+;)[0-9]+(?=])";
string input = @"I[1;2]";        
Match m = Regex.Match(input, pattern); 
Console.WriteLine(m.Value); // 2

关于c# - 有没有办法使用正则表达式来分割 I[1,2]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66764413/

相关文章:

c# - 如何在重定向页面之前获取警报消息

c# - 创建首选项对话框

c# - DataTable - foreach 行,第一行除外

c# - 即使在映射中定义了NotAnalyzed的属性,Elasticsearch NEST方面也将标记化字段

javascript - 使用 RegEx 替代条件语句

r - 数据框上的 gsubfn

Python 替换整个单词,包括开头的特殊字符

c# - 在 Linq to Sql 中使用排序规则

regex - 为 ' regexp ' 、 '\c+' 和 '\i\c* ' 评估 ' [\i-[:]][\c-[:]]* ' 的问题

java - 我的正则表达式搜索仅打印出最后一个匹配项