从分隔符之间的 List<string> 中删除字符(来自文本文件)

Posted

技术标签:

【中文标题】从分隔符之间的 List<string> 中删除字符(来自文本文件)【英文标题】:Remove characters from List<string> in between separators (from text file) 【发布时间】:2020-02-09 23:59:03 【问题描述】:

快速替换文本文件中的文本。 来自:somename@somedomain.com:hello_world 至此:somename:hello_world

它需要是 FAST 并且支持多行文本文件。

我尝试将字符串分成三个部分,但它似乎很慢。下面代码中的示例。

<pre><code>
    public static void Conversion()
    
        List<string> list = File.ReadAllLines("ETU/Tut.txt").ToList();
        Console.WriteLine("Please wait, converting in progress !");

        foreach (string combination in list)
        
            if (combination.Contains("@"))
            

            write: try
                
                    using (StreamWriter sw = new 
                    StreamWriter("ETU/UPCombination.txt", true))
                    
                        sw.WriteLine(combination.Split('@', ':')[0] + ":" 
                        + combination.Split('@', ':')[2]);
                    
                
                catch
                
                    goto write;
                
            
            else
            
                Console.WriteLine("At least one line doesn't contain @");
            

        


    </code></pre>

这是一种将文本文件中的每一行从 somename@somedomain.com:hello_world

收件人:somename:hello_world 然后将其保存为不同的文本文件。

!记住域位总是变化的!

【问题讨论】:

请准确解释您要对输入文本执行的操作。 【参考方案1】:

很可能不是最快的,但它非常快,表达类似于,

@[^:]+

并将其替换为空字符串。

using System;
using System.Text.RegularExpressions;

public class Example

    public static void Main()
    
        string pattern = @"@[^:]+";
        string substitution = @"";
        string input = @"somename@somedomain.com:hello_world1
somename@some_other_domain.com:hello_world2";
        RegexOptions options = RegexOptions.Multiline;

        Regex regex = new Regex(pattern, options);
        string result = regex.Replace(input, substitution);
    


如果您希望简化/修改/探索表达式,在regex101.com 的右上角面板中已对此进行了说明。如果您愿意,您还可以在this link 中观看它如何与一些示例输入匹配。


正则表达式电路

jex.im 可视化正则表达式:

【讨论】:

1) RegexOptions options = RegexOptions.Multiline; 是多余的,因为正则表达式没有可修改的锚点,2) 使用正则表达式实例 Replace 方法不会使其更快,静态 Regex.Replace 会更快。事实上,为了加快速度,正则表达式应该是带有RegexOptions.Compiled 选项的静态只读私有字段。然后,它几乎和 LINQ 一样快。

以上是关于从分隔符之间的 List<string> 中删除字符(来自文本文件)的主要内容,如果未能解决你的问题,请参考以下文章

C#中List和数组之间转换的方法

C#中List〈string〉和string[]数组之间的相互转换

将 List<String> 转换为分隔字符串 [重复]

使用 java 8 流转换 List<Map<String,String>> 与“,”分隔的字符串值

如何将分隔字符串拆分()到 List<String>

通过 http 管道将逗号分隔的值转换为 list<string>