C# 用正则表达式从字符串中剪切一行

C# 用正则表达式从字符串中剪切一行,c#,C#,我正在寻找一种解决方案,用于从C#中的字符串中删除第2行。当然,我可以逐行阅读,但使用正则表达式会更好、更优雅。例如: 之前: this is line 1 this is line 2 this is line 3 this is line 4 之后: this is line 1 this is line 3 this is line 4 有人对如何使用正则表达式有很好的提示吗? 谢谢。如果您真的想: s = Regex.Replace(s, @"\A(.*\n).*\n", "$1")

我正在寻找一种解决方案,用于从C#中的字符串中删除第2行。当然,我可以逐行阅读,但使用正则表达式会更好、更优雅。例如:

之前:

this is line 1
this is line 2
this is line 3
this is line 4
之后:

this is line 1
this is line 3
this is line 4
有人对如何使用正则表达式有很好的提示吗? 谢谢。

如果您真的想:

s = Regex.Replace(s, @"\A(.*\n).*\n", "$1");
对于处理平台相关的线端:

Regex regex = new Regex(string.Format(@"\A(.*{0}).*{0}", Environment.NewLine));
s = regex.Replace(s, "$1");
但是,我认为使用
string.Split
然后重新加入会更清楚:

List<string> lines = s.Split(new string[]{ Environment.NewLine },
                             StringSplitOptions.None)
                      .ToList();
lines.RemoveAt(1);

// Note: In .NET 4.0 the ToArray call is not required.
string result = string.Join(Environment.NewLine, lines.ToArray());
List lines=s.Split(新字符串[]{Environment.NewLine},
StringSplitOptions.None)
.ToList();
行。移除(1);
//注意:在.NET4.0中,不需要ToArray调用。
string result=string.Join(Environment.NewLine,lines.ToArray());
我同意正则表达式更简洁,但不熟悉正则表达式语法的人(甚至不熟悉正则表达式语法的人)会更喜欢更明确的版本。

如果您真的想:

s = Regex.Replace(s, @"\A(.*\n).*\n", "$1");
对于处理平台相关的线端:

Regex regex = new Regex(string.Format(@"\A(.*{0}).*{0}", Environment.NewLine));
s = regex.Replace(s, "$1");
但是,我认为使用
string.Split
然后重新加入会更清楚:

List<string> lines = s.Split(new string[]{ Environment.NewLine },
                             StringSplitOptions.None)
                      .ToList();
lines.RemoveAt(1);

// Note: In .NET 4.0 the ToArray call is not required.
string result = string.Join(Environment.NewLine, lines.ToArray());
List lines=s.Split(新字符串[]{Environment.NewLine},
StringSplitOptions.None)
.ToList();
行。移除(1);
//注意:在.NET4.0中,不需要ToArray调用。
string result=string.Join(Environment.NewLine,lines.ToArray());

我同意正则表达式更简洁,但不熟悉正则表达式语法的人(甚至不熟悉正则表达式语法的人)会更喜欢更明确的版本。

我知道你要求一个正则表达式解决方案,但当我说正则表达式不是这项工作的合适工具时,不要吹毛求疵

通过将文件作为行读取,并跳过第二行,您可以获得一个优雅的解决方案:

string fileContents = 
    String.Join(Environment.NewLine, File.ReadAllLines("filepath").Where((line, index) => index != 1));

我知道你要求一个正则表达式解决方案,但当我说正则表达式不是这个工作的合适工具时,请不要吹毛求疵

通过将文件作为行读取,并跳过第二行,您可以获得一个优雅的解决方案:

string fileContents = 
    String.Join(Environment.NewLine, File.ReadAllLines("filepath").Where((line, index) => index != 1));

将正则表达式设置为单线模式以禁用换行符的特殊处理。例如:

Regex r = new Regex(@"^[^\r\n]*\r\n([^\r\n]*\r\n)", RegexOptions.Singleline);
Match m = r.Match(myText);
String line 2 = null;
if (m.Success) {
    line2 = m.Captures[1].Value;
    myText = substring(myText, 0, m.Captures[1].Index) +
        substring(myText, m.Captures[1].Index + m.Captures[1].Length);
}
// line2 will contain "this is line 2\r\n"
// myText will be all text except line2.

获取更多帮助。

将正则表达式设置为单线模式,以禁用对换行符的特殊处理。例如:

Regex r = new Regex(@"^[^\r\n]*\r\n([^\r\n]*\r\n)", RegexOptions.Singleline);
Match m = r.Match(myText);
String line 2 = null;
if (m.Success) {
    line2 = m.Captures[1].Value;
    myText = substring(myText, 0, m.Captures[1].Index) +
        substring(myText, m.Captures[1].Index + m.Captures[1].Length);
}
// line2 will contain "this is line 2\r\n"
// myText will be all text except line2.

寻求更多帮助。

“有些人在遇到问题时,会想“我知道,我会使用正则表达式。”现在他们有两个问题了。@Yuriy Faktorovich这是真的!有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题了!谢谢,两种解决方案看起来都很不错!谢谢,两种解决方案看起来都很不错!