我有以下具有很多相似文本模式的文本文件(inputFile.txt):
Example1 - Should be Removed (original file contains a lot of similar parts)
Event Number (#)
string2
string3
string4
Example2 -Should NOT be Removed
Event Number (#)
string2
string3
string4
string5
Example3 - Should NOT be Removed
Event Number (#)
AnyText
string2
string3
string4
使用以下表达式,我可以映射必要的示例(第1个)。 不幸的是,我不知道如何使用C#从文本文件中删除此文本。
Event number\n(^\s*$)\n(.*)\n(^\s*$)\n(.*)\n(^\s*$)\n(.*)\n(^\s*$)
用于分析的数据示例: https://gist.github.com/SeregaVRS/0d47e84607e5dc1b8e954c2c2cc50fad
您可以使用https://regex101.com来获取更多详细信息,我想使用正则表达式删除它
我想清理文件中的其他字词以删除未使用的示例:
删除格式:
Event Number (#)
{Empty String}
string2
{Empty String}
string3
{Empty String}
string4
{Empty String}
不应受到影响的示例:
Event Number (#)
{Empty String}
string2
{Empty String}
string3
{Empty String}
string4
string5
我遇到的大多数示例都与单行正则表达式匹配有关。
您知道如何使用C#代码从整个文件中删除/替换未使用的文本吗?
应该是这样的:
保存输出(无example1)
string regexForEmptyNotes =
@"string\n?(.*)\n(^\s*$)\n(.*)\n(^\s*$)\n(.*)\n(^\s*$)\n(.*)\n(^\s*$)";
var fileLines = File.ReadLines(inputFileName, Encoding.Default);
// Something should happened in this place :)
Regex.Replace("Expected string as an input but not strings collection", regexForEmptyNotes, string.Empty);
File.WriteAllLines(outputFileName, fileLines, Encoding.UTF8);
预期的outputResult.txt
Example2 -Should NOT be Removed
Event Number (#)
string2
string3
string4
string5
Example3 - Should NOT be Removed
Event Number (#)
AnyText
string2
string3
string4
输出文件应仅包含Example2和Example3。 不幸的是,我应该保存格式,因此无法使用版本将文件中的所有文本转换为1个长字符串。
很抱歉,不清楚的解释。
答案 0 :(得分:0)
不清楚您要对该文件做什么。 无论如何,我都会尝试回答。
如果要通过标识替换某些文本,可以执行以下操作:
示例
Example1 - Should be Removed (original file contains a lot of similar parts)
string
string2
string3
string4
Example2 -Should NOT be Removed
string
string2
string3
string4
string5
Example3 - Should NOT be Removed
string
AnyText
string2
string3
string4
要使用Regex删除Example1:
inputString = Regex.Replace(inputString , Regex.Escape("Example1"), Regex.Replace(string.Empty, "\\$[0-9]+", @"$$$0"), RegexOptions.IgnoreCase);
答案 1 :(得分:0)
您可能要做的是使用例如System.IO.File.ReadAllText
将整个文本读取为一个字符串。然后进行替换,并使用例如System.IO.File.WriteAllText
如果您希望在下一行没有文字时进行匹配,则可以使用:
^[ \t]*string(?:\n[ \t]*\n.*){3}$(?!\n[ \t]*\S)
说明
^
行的开头[ \t]*
匹配0+次空格或制表符string
字面上匹配(?:\n[ \t]*\n.*){3}$
重复3次,与换行符,可选的空格或制表符匹配,再与换行符匹配。之后,匹配任何char 0+次。(?!\n[ \t]*\S)
否定断言来断言以下内容不是换行符,空格/制表符和非空格字符。例如:
var lines = File.ReadAllText("inputFile.txt", Encoding.Default);
var regex = new Regex(@"^[ \t]*string(?:\n[ \t]*\n.*){3}$(?!\n[ \t]*\S)", RegexOptions.Multiline);
var result = regex.Replace(lines, "");
File.WriteAllText(@"outputFile.txt", result);