如何从字符串中获取数字 - C# - Regex

时间:2014-05-19 02:43:37

标签: c# html regex

好的,这是我的问题:

<div class="anime_info"><div class='ctdn'>Ep 7 - <span class="cd_day">3</span>d <span class="cd_hr">10</span>h <span class="cd_min">30</span>m </div>

如何使用Regex从字符串中获取7。我试着休息一下:

System.Text.RegularExpressions.Regex.Matches(line,@"[^\d]")[0].Value
System.Text.RegularExpressions.Regex.Matches(line,@"\d")[0].Value
System.Text.RegularExpressions.Regex.Match (line, @">Ep (\d*)- <span").Groups [1].Value
System.Text.RegularExpressions.Regex.Match (line, @">Ep ([0-9]*)- <span").Groups [1].Value
System.Text.RegularExpressions.Regex.Match (line, @">Ep ([0-9])- <span").Groups [1].Value
System.Text.RegularExpressions.Regex.Match(line,@"\d").Value

一切都失败了。

请帮助并抱歉我的英语不好。

4 个答案:

答案 0 :(得分:2)

这将找到一组文本,其前导和尾随空格之间带有数字:

 (\d+) 

因为它是\d+,所以会找到1 or more位数。

Regular expression visualization

Debuggex Demo

答案 1 :(得分:2)

我会选择(?:Ep )(\d*) - 一个非捕获组“Ep”捕获后面的数字。

Demo 1

Demo 2

答案 2 :(得分:0)

使用以下代码应该有效 -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace Test.Console
{
    class Program
    {
        static void Main(string[] args)
        {
            string reference = "<div class=\"anime_info\"><div class='ctdn'>Ep 7 - <span class=\"cd_day\">3</span>d <span class=\"cd_hr\">10</span>h <span class=\"cd_min\">30</span>m </div>";

            var regex = "[>]Ep(\\s+)(\\d+)(\\s+)\\-(\\s+)[<]";
            var regex2 = "(\\d+)";
            foreach (var m in Regex.Matches(reference, regex))
            {
                System.Console.WriteLine(m.ToString());
                var m2 = Regex.Match(m.ToString(), regex2);
                System.Console.WriteLine(m2.ToString());
            }
            System.Console.Read();
        }
    }
}

它打印以下内容,因此它正在运行 -

>Ep 7 - <
7
  1. 第一个regex用于隔离包含7
  2. 的部分
  3. 第二个regex2用于隔离7内的regex
  4. 为了安全起见,我使用了\\s+而不是使用简单的空格,所以如果有更多的空格,它就不会失败。
  5. 顺便说一句-是正则表达式中的关键字符,因此如果您在字符串中匹配\-,则应使用-

答案 3 :(得分:0)

从你的正则表达式看起来,你知道&#34; Ep&#34;将始终与数字后跟空格。一种选择是将你的字符串分成几个子字符串。

string input = "<div class='anime_info'><div class='ctdn'>Ep 7 - <span class='cd_day'>3</span>d <span class='cd_hr'>10</span>h <span class='cd_min'>30</span>m </div>";

//grab a substring starting after "Ep "
string next = input.Substring(input.IndexOf("Ep ") + 3);

//grab the start of the new string until the first space
string final = next.Substring(0, next.IndexOf(" "));

如果你想概括一下,你可以使用像

这样的函数来实现
string stringBetween (string input, string start, string stop)
{
    //grab a substring starting after start
    string output = input.Substring(input.IndexOf(start) + start.Length);
    //grab the start of the new string until the first instance of stop
    output = output.Substring(0, output.IndexOf(stop));
    return output;
}

然后你就可以打电话了

stringBetween(input, "Ep ", " ");

这也假设您知道start的第一个实例后面跟着您想要的值。