如何从C#中匹配的字符串中提取数字?

时间:2017-09-30 07:47:04

标签: c# regex

我想从输入中提取表情符号。

例如,输入:

`<eid=1>  valid get 1`
`<eid = >  invalid `
`<exd = 1>  invalid` 
`< eid = 1000> valid get 1000`

我知道如何匹配这些字符串,但我不知道如何从匹配的字符串中提取这些ID。

3 个答案:

答案 0 :(得分:0)

使用正则表达式

$.ajax

答案 1 :(得分:0)

你可以这样做。如果您不想将每个项目存储在一个数组中(例如,您有html代码),则可以将所有值存储为一个字符串,如下所示:

var input = @"`<eid=1>  valid get 1`
              `<eid = >  invalid `
              `<exd = 1>  invalid` 
              `< eid = 1000> valid get 1000`";
var regex = new Regex(@"(?<open>\=).*?(?<final-open>\>)");
var matches = regex.Matches(input).Cast<Match>().Select(m => m.Groups["final"].Value).Distinct().ToList();

foreach (var match in matches)
{
    // here you have all the matches
    var id = int.Parse(match.Trim());
}

此方法设置所需匹配项的开始和结束标记,这是开放标记'\ =',这是结束标记'&gt;':

var regex = new Regex(@"(?<open>\=).*?(?<final-open>\>)");

答案 2 :(得分:0)

您需要了解什么是匹配,什么是捕获以及如何匹配特定数据的捕获。

在正则表达式领域,匹配捕获和基本分组之间存在差异。

您希望匹配整个值<eid=8>,但希望将值8转换为捕获。这是通过添加分组( )模式来建立1到多个捕获组来完成的。对于匹配,可以保存一个或多个从1到N开始索引的分组。归零是一个自动完成的特殊组,稍后会解释。

因此,对于数据<eid=8>,要对 capture 进行分组,请使用此正则表达式<\w+=(\d+)\>(而不是可行模式<\w+=\d+\>)。分组是将数字放入1的匹配捕获组中,其值为8

那么群体到底是什么?

  • Groups[0] 始终 整个匹配,例如您所见<eid=8>
  • Groups[1-N]是指定( )构造时的单独捕获。因此,对于我们的示例,Groups[1].Value8的数量。 很好,它可以回答你的问题。
  • 可以通过输入(<?<{name here}>... )来进行命名匹配捕获。根据该逻辑,我们可以将模式更改为<\w+=(?<TheNumbers>\d+)\>,然后我们可以使用Groups["TheNumbers"].Value甚至Groups[1].Value进行提取。