1

私は以下のような長い文字列を持っています。キーワードが見つかったら、文字を置き換えたいのですが(.abc_ or .ABC_)。システムが1行ずつ読み取るため、キーワードが見つかった場合は、前の単語が置き換えられて次のようになります。"john"

insert into material.abc_Inventory; Delete * from table A; ....   
insert into job.ABC_Inventory; Show select .....; ....

に変更されました

insert into john.ABC_Inventory; Delete * from table A;    
insert into john.ABC_Inventory; Show select .....;

以下は私のコードです。

string output = string.Empty;
using (StringReader reader = new StringReader(content))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        if (line.Contains(".ABC_"))
            line.Replace(" word in front of the keyword" + line.Substring(line.IndexOf(".ABC_")), " john" + line.Substring(line.IndexOf(".ABC_")));
            output += whole line of edited code; 

        else if (line.Contains(".abc_"))
            line.Replace(" word in front of the keyword" + line.Substring(line.IndexOf(".abc_")), " john" + line.Substring(line.IndexOf(".abc_")));
            output += whole line of edited code; 

        else
            output += line.ToString();
    }
}

キーワードの前に素材や仕事という言葉を入れることができません。

4

3 に答える 3

3
content =  Regex.Replace(content, @"\s\w+\.(abc|ABC)_", " john.$1_");
于 2012-09-13T07:18:39.580 に答える
1

これの代わりにString.Formatを使用してください:

var stringBuffer = new StringBuffer();
...
line = "insert into {0}.ABC_Inventory; Show select ..."
stringBuffer.AppendFormat(line, arg1, arg2, arg3);
...
于 2012-09-13T07:13:30.720 に答える
1
var list = line.Split(new[] {".abc_", ".ABC_"}, 
                              StringSplitOptions.RemoveEmptyEntries);
if (list.Count() > 1)
{
    string toReplace = list.First().Split(' ').Last();
    string output = line.Replace(toReplace, "john");
}
于 2012-09-13T07:14:34.553 に答える