我有一个config.txt文件,看起来像这样
some text here = 5
another text line here = 4 with random garbage
some other line = 2 5 some number 12
7
foo bar 9
为澄清起见,仅在“ =”之后的数字。只是在“ =“
之后出现的那个数字我希望只能在“ =”之后提取整数。因此,在这种情况下,输出应类似于
5
4
2
我以前在C ++中使用类似的方法完成此操作
if (file_to_read.is_open()) {
file_to_read.ignore(numeric_limits<streamsize>::max(), '=');
while (file_to_read >> input) {
values.push_back(input);
file_to_read.ignore(numeric_limits<streamsize>::max(), '=');
}
file_to_read.close();
我想了解您在C#中的操作方式,如果有任何文档可以参考
答案 0 :(得分:0)
我们在这里:
string input =
@"some text here = 5
another text line here = 4 with random garbage
some other line = 2 5 some number 12
7
foo bar 9";
var matches = Regex.Matches(input, @"(?:.*(?<==).*)(\d+)");
foreach(Match match in matches)
{
Console.WriteLine(match.Groups[1]);
}
输出:
5
4
2
对于正则表达式,会发生以下情况: 对任意符号进行非选择性的多次查找,后跟“ =”号:
(?:.*(?<==).*)
这是用于匹配数字的
(\d+)
不客气。 =)
答案 1 :(得分:0)
使用正则表达式,过程并不太复杂。读取流时进行过滤似乎太复杂了。只需执行以下操作即可:
" = "
字符串和数字字符\d+
的模式。Match
对象中提取为m.Groups[1].Value
。操作后,将返回列表。
public static List<Int32> ExtractInts(String filePath)
{
String input = File.ReadAllText(filePath);
List<Int32> ints = new List<Int32>();
Regex r = new Regex(" = (\\d+)");
MatchCollection mc = r.Matches(input);
foreach(Match m in mc)
ints.Add(Int32.Parse(m.Groups[1].Value));
return ints;
}