0

OK、次の内容を含むテキスト ファイルがあります。

    books_book1 = 1
    books_book2 = 2
    books_book3 = 3

「books_book1 =」を保持したい

これまでのところ、私は持っています:

string text = File.ReadAllText("settings.txt");
text = Regex.Replace(text, ".*books_book1*.", "books_book1 = a",
RegexOptions.Multiline);
File.WriteAllText("settings.txt", text);
text = Regex.Replace(text, ".*books_book2*.", "books_book2 = b",
RegexOptions.Multiline);
File.WriteAllText("settings.txt", text);
text = Regex.Replace(text, ".*books_book3*.", "books_book3 = c",
RegexOptions.Multiline);
File.WriteAllText("settings.txt", text);

これにより、次の結果が得られます。

books_book1 = a=1

ファイルへの出力は次のようになります。

    books_book1 = a
    books_book2 = b
    books_book3 = c

よろしくお願いします...

4

4 に答える 4

2

これが問題を解決するための最良の方法だとは思いませんが、RegEx に必要なことをさせるには、次のようにします。

var findFilter = @"(.*books_book1\s*=\s)(.+)";
var replaceFilter = "${1}a"    
text = Regex.Replace(text, findFilter, replaceFilter, RegexOptions.Multiline)   
File.WriteLine("settings.txt", text);
....

この場合、正規表現の(との間のコードは、最初で唯一の後方参照キャプチャ グループであり、置換部分では、一致するグループ テキストを使用して必要な出力を作成します。また、空白に使用していることに気付くでしょう。たとえば、book111 とは一致しません。あなたが対処する必要がある他のエッジケースがあると確信しています。)${1}\s

books_book1 = a
...
于 2013-06-19T19:07:29.763 に答える
1

より一般的なアプローチの開始点は次のとおりです。

この正規表現は、数字と空白の長さの変動性を考慮して、最後の数字をキャプチャします。

text = Regex.Replace(text , @"(books_book\d+\s*=\s*)(\d+)", DoReplace)

// ... 

string DoReplace(Match m)
{
    return m.Groups[1].Value + Convert.ToChar(int.Parse(m.Groups[2].Value) + 96);
}
于 2013-06-19T21:26:57.737 に答える