我有以下字符串,我想从中检索一些值:
============================
Control 127232:
map #;-
============================
Control 127235:
map $;NULL
============================
Control 127236:
我想只接受控制。因此有没有办法从上面的字符串中检索到包含类似[127232, 127235, 127236]
?
答案 0 :(得分:3)
实现这一目标的一种方法是使用正则表达式,它确实会引入一些复杂性,但会给出你需要的答案,只需要一点LINQ就可以了。
从正则表达式开始,在组内捕获所需的数据:
var regex = new Regex(@"Control\s+(\d+):");
这将查找文字字符串“Control”,后跟一个或多个空白字符,后跟一个或多个数字(在捕获组中),后跟文字字符串“:”。
然后使用上面定义的正则表达式从输入中捕获匹配项:
var matches = regex.Matches(inputString);
然后,使用一点LINQ,您可以将其转换为数组
var arr = matches.OfType<Match>()
.Select(m => long.Parse(m.Groups[1].Value))
.ToArray();
现在arr
是long
的数组,只包含数字。
答案 1 :(得分:2)
试试这个(假设你的字符串被命名为s并且每一行都是用\ n创建的):
List<string> ret = new List<string>();
foreach (string t in s.Split('\n').Where(p => p.StartsWith("Control")))
ret.Add(t.Replace("Control ", "").Replace(":", ""));
ret.Add(...)
部分不优雅,但有效......
<强>编辑:强>
如果您想使用数组string[] arr = ret.ToArray();
<强> SYNOPSYS:强>
我看到你真的是个新手,所以我试着解释一下:
s.Split('\n')
创建一个字符串[](字符串中的每一行).Where(...)
部分从数组中仅提取以Control foreach
部分导航返回的数组,一次取一个字符串t.Replace(..)
剪掉不需要的字符串ret.Add(...)
最终将搜索到的项目添加到返回列表中答案 2 :(得分:1)
离开我的头顶试试这个(这很快又很脏),假设你要搜索的文字是变量'text':
List<string> numbers = System.Text.RegularExpressions.Regex.Split(text, "[^\\d+]").ToList();
numbers.RemoveAll(item => item == "");
第一行将所有数字拆分为列表中的单独项目,它还会分割出大量空字符串,第二行会删除空字符串,为您留下三个数字的列表。如果要将其转换回数组,只需将以下行添加到结尾:
var numberArray = numbers.ToArray();
答案 3 :(得分:0)
是的,方式存在。我不记得一个简单的方法,但是要解析字符串来提取这个值。它的算法是下一个:
实现这种算法几乎是原始的..)
这是最简单的实现(你的字符串是str):
int i, number, index = 0;
while ((index = str.IndexOf(':', index)) != -1)
{
i = index - 1;
while (i >= 0 && char.IsDigit(str[i])) i--;
if (++i < index)
{
number = int.Parse(str.Substring(i, index - i));
Console.WriteLine("Number: " + number);
}
index ++;
}
使用LINQ进行这么小的操作是值得怀疑的。