在字符串中查找数字

时间:2014-09-22 21:04:02

标签: c# regex

我有一个包含动态模式的字符串,它没有特定的顺序。

content: ($$)^1 OR title: ($$)^15 OR url: ($$)^20

为了进一步了解,我已将它们分解为与以下内容相关的内容:

content: ($$)^1

title: ($$)^15

url: ($$)^20

因此,当循环遍历我的字段名称列表(内容,标题,网址等)时,我需要查看字符串中是否存在该字段。如果确实如此,我必须在胡萝卜之后立即提取数字。

在内容的情况下,它将是1。 标题,15。等等。

3 个答案:

答案 0 :(得分:2)

使用正则表达式:

static void Main()
        {
            var input = "content: ($$)^1 OR title: ($$)^15 OR url: ($$)^20";
            foreach(Match m in Regex.Matches(input, @"(?<name>\S+): \(\$\$\)\^(?<digits>\d+)"))
            {
                Console.WriteLine(m.Groups["name"] + " : " + m.Groups["digits"]);
            }
        }

答案 1 :(得分:1)

你可以像这样提取数字。

\(\${2}\)\^(\d+)

答案 2 :(得分:0)

你不需要正则表达式,对吗?您可Split OR:^

string input = "content: ($$)^1 OR title: ($$)^15 OR url: ($$)^20";
string[] tokens = input.Split(new[] { " OR " }, StringSplitOptions.RemoveEmptyEntries);
var lookup = tokens.ToLookup(str => str.Split(':')[0].Trim(), str => str.Split('^').Last().Trim());
int content = lookup["content"].Select(int.Parse).DefaultIfEmpty(int.MinValue).First();
int title = lookup["title"].Select(int.Parse).DefaultIfEmpty(int.MinValue).First();
int url = lookup["url"].Select(int.Parse).DefaultIfEmpty(int.MinValue).First();

如果数字可能包含非数字,并且您想要跳过此无效格式,请输入:

int url = lookup["url"]
    .Where(num => num.All(Char.IsDigit))
    .Select(int.Parse)
    .DefaultIfEmpty(int.MinValue)
    .First();    // int.MinValue if non-digits were detected