如何将正则表达式应用于字符串列表?

Dmi*_*yev 0 c# regex func

我想知道是否有办法避免foreach以下代码中的循环:

List<string> lines1 = new List<string>();
List<string> lines2 = new List<string>();
lines1.AddRange(File.ReadAllLines("in.txt"));
foreach(string s in lines1)
    lines2.Add(Regex.Replace(s,"bim(.*)","bom$1");
Run Code Online (Sandbox Code Playgroud)

请注意,循环还需要在处理期间有两个列表.我的目标是将一个正则表达式应用于原位列表中的每个字符串.

Cod*_*ter 6

你不想迭代.然后不要创建一个开头的集合,而是用一个字符串读取整个文件:

string input = File.ReadAllText("in.txt");
string output = Regex.Replace(input, "bim(.*)", "bom$1");
Run Code Online (Sandbox Code Playgroud)

然后,如果你想获得输入中的"行",请按照最简单的方法解释输出,以便在.NET中的换行符上拆分字符串?:

string[] outputLines = input.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
Run Code Online (Sandbox Code Playgroud)

  • 虽然这确实消除了显式迭代,但是`ReadAllLines`和`ReadAllText` /`Split`之间存在一些细微差别:1)`ReadAllLines`占所有3个`NewLine`可能性(`\ r``,`\n`,和`\ r \n`).2.更换(可能是轻微的)替换模式可以穿过换行符,例如`bim __ \n ___`)并且在看到单独的行时不会更换. (2认同)