C#从X开头的文本文件中获取所有单词

时间:2015-11-08 22:28:10

标签: c# text extract

我有一个看起来像这样的文本文件:

  

(' STEAM_1:0:XXXXXXXX',' User1',' Germany',73677,0,0,105,151,105,&#39 ; 2015年9月5日&#39),    (' STEAM_1:0:XXXXXX',' User2','比利时',64005,3,100,161,277,161,' 2015- 11-08&#39),   (' STEAM_1:0:XXXXXXX',' User3','丹麦',52226,0,0,84,146,84,' 2015- 11-05&#39),   (' STEAM_1:0:XXXXXXXXX',' User4',' Denmark',48300,0,0,98,291,98,' 2015- 09-29&#39),   (' STEAM_1:0:XXXXXXXX',' User5',' Denmark',47817,4,1000,104,272,104,' 2015- 11-08&#39),

如何提取" STEAM_1:0:XXXXXXX"一个全新的文件没有别的吗?我有250个用户。

我对编程非常陌生,但我尝试了一些事情,但没有任何效果。 任何建议将不胜感激。

3 个答案:

答案 0 :(得分:1)

使用Regex

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.txt";
        static void Main(string[] args)
        {
            string input = File.ReadAllText(FILENAME);
            string pattern = @"\('(?'steam'[^']*)";
            MatchCollection matches = Regex.Matches(input, pattern, RegexOptions.Singleline);
            foreach (Match match in matches)
            {
                Console.WriteLine(match.Groups["steam"]);
            }
            Console.ReadLine();
        }
    }
}
​

答案 1 :(得分:0)

我会做这样的事情

 List<string> formattedList = new List<string>();

        //read from .txt file
        using (StreamReader sr = new StreamReader("Source path.txt"))
        {
            string line = sr.ReadLine();

            //get index of second occurance of the ' char.
            int length = line.IndexOf("'", 2); 

            //start 2 indexes in and return the substring until second 
            //occurance of ' char
            string formattedLine = line.Substring(2, length);
            formattedList.Add(formattedLine);

        }

        //write to .txt file
        using (StreamWriter sw = new StreamWriter("Destination Path.txt"))
        {
            foreach (var line in formattedList)
            {
                sw.WriteLine(line);
            }
        }

了解更多信息 https://msdn.microsoft.com/en-us/library/8bh11f1k.aspxhttps://msdn.microsoft.com/en-us/library/db5x7c0d(v=vs.110).aspx

答案 2 :(得分:0)

不是最优雅的解决方案,但它有效!

    static void Main(string[] args)
    {
        var text =
@"('STEAM_1:0:XXXXXXXX', 'User1', 'Germany', 73677, 0, 0, 105, 151, 105, '2015-09-05'),
('STEAM_1:0:XXXXXX', 'User2', 'Belgium', 64005, 3, 100, 161, 277, 161, '2015-11-08'),
('STEAM_1:0:XXXXXXX', 'User3', 'Denmark', 52226, 0, 0, 84, 146, 84, '2015-11-05'),
('STEAM_1:0:XXXXXXXXX', 'User4', 'Denmark', 48300, 0, 0, 98, 291, 98, '2015-09-29'),
('STEAM_1:0:XXXXXXXX', 'User5', 'Denmark', 47817, 4, 1000, 104, 272, 104, '2015-11-08'),";

        var split = text.Split(new[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries);

        var sb = new StringBuilder();
        foreach (string line in split)
        {
            var firstCommer = line.IndexOf(",");

            sb.AppendLine(line.Substring(2, firstCommer - 3));
        }


        File.WriteAllText(@"c:\temp\out.txt", sb.ToString());
    }