我有一个超过12,000行的文本文件。在该文件中,我需要替换某些行。
有些行以;
开头,有些行有随机词,有些以空格开头。但是,我只关注下面描述的两种类型的线。
我有一行像
SET avariable:0 ;Comments
我需要将其替换为
set aDIFFvariable:0 :Integer // comments
Integer
I
这个词中唯一必要的CASE需要大写。
我也有
String aSTRING(7) ;Comment
需要看起来像
STRING aSTRING(7) :array [0..7] of AnsiChar; // Comments
我需要保持所有间距相同。
这是我到目前为止的内容
static void Main(string[] args)
{
string text = File.ReadAllText("C:\\old.txt");
text = text.Replace("old text", "new text");
File.WriteAllText("C:\\new.txt", text);
}
我想我需要使用REGEX,我试图在第一个例子中使用它:
\s\s[set]\s*{4}.*[:0]\s*[;].*
< - 我现在知道这是无效的 - 请告知
我需要帮助才能正确设置程序以查找和替换这些行。我应该一次读一行,如果匹配,那么做点什么?我真的很困惑从哪里开始。
我想要做的简要伪代码
//open file
//step through file
//if line == [regex] then add/replace as needed
//else, go to next line
//if EOF, close file
答案 0 :(得分:2)
分别对此进行一次尝试,因为每条线都是完全不同的,因此在同一个表达式中捕获它们将是一场噩梦。
要匹配您的第一个示例并替换它:
String input = "SET avariable:0 ;Comments";
if (Regex.IsMatch(input, @"\s?(set)\s*(\w+):?(\d)\s+;?(.*)?"))
{
input = Regex.Replace(input, @"\s?(set)\s*(\w+):?(\d)\s+;?(.*)?", "$1 $2:$3 :Integer // $4";
}
给它一个镜头(在这里玩它:http://regex101.com/r/zY7hV2)
要匹配您的第二个示例并替换它:
String input = "String aSTRING(7) ;Comments";
if (Regex.IsMatch(input, @"\s?(string)\s*(\w+)\((\d)\)\s*;(.*)"))
{
input = Regex.Replace(input, @"\s?(string)\s*(\w+)\((\d)\)\s*;(.*)", "$1 $2($3) :array [0..$3] of AnsiChar; // $4";
}
在这里玩这个:http://regex101.com/r/jO5wP5