我有一个包含动态模式的字符串,它没有特定的顺序。
content: ($$)^1 OR title: ($$)^15 OR url: ($$)^20
为了进一步了解,我已将它们分解为与以下内容相关的内容:
content: ($$)^1
title: ($$)^15
url: ($$)^20
因此,当循环遍历我的字段名称列表(内容,标题,网址等)时,我需要查看字符串中是否存在该字段。如果确实如此,我必须在胡萝卜之后立即提取数字。
在内容的情况下,它将是1。 标题,15。等等。
答案 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