C# 用正则表达式从字符串中剪切一行
我正在寻找一种解决方案,用于从C#中的字符串中删除第2行。当然,我可以逐行阅读,但使用正则表达式会更好、更优雅。例如: 之前: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")
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这是真的!有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题了!谢谢,两种解决方案看起来都很不错!谢谢,两种解决方案看起来都很不错!