[英]String replacement not working as expected
我的問題是:
我有一個.ini文件,如下所示:
StreamReader sr = new StreamReader(txtb_path.Text, Encoding.Default);
StringBuilder content = new StringBuilder();
// schreibt Zeile für Zeile auf den StringBuilder bis das Ende der Datei erreicht ist
while (!sr.EndOfStream)
content.AppendLine(sr.ReadLine());
// StringBuilder als String an die TextBox übergeben
this.textBox1.Text = content.ToString();
然后我應用以下正則表達式:
string regex = @"^FensterGemerkt.+?\d+\.\d+\.\d+\,\ \d{2}:\d{2}:\d{2}\ :\ -{1}?\d+\,.*?$"; //@"^Fenster.*$";
RegexOptions options = RegexOptions.Multiline;
// search in
string input = content.ToString();
//txtb_count.Text = "anzahl zeilen: " + Convert.ToString(content.Capacity);
// run regex
MatchCollection matches = Regex.Matches(input, regex, options);
// MessageBox.Show(Convert.ToString(matches.Count));
txtb_count.Text = Convert.ToString(matches.Count);
string cleanup ="";
foreach (Match match in matches)
{
// clean the ini
cleanup = Regex.Replace(input, match.Value, "");
// Output all matches
textBox2.Text = textBox2.Text + "\n" + match.Value;
}
.ini文件如下所示:
1
FensterGemerkt=12.11.2012, 10:42:37 : -32000,32744--31840,32768
Fenster=-32000,32744,160,24
2
FensterGemerkt=12.11.2012, 10:49:46 : 0,44-1024,768
Fenster=0,44,1024,724
我想要的是如果正則表達式匹配第一個條目:
FensterGemerkt=12.11.2012, 10:42:37 : -32000,32744--31840,32768
...然后替換或移除它。
我的應用程序有效,但僅適用於.ini文件中的最后一個條目。 我認為我的foreach
有問題,但我無法解決。
有更好的方法來執行此操作,但最簡單的答案是因為您將cleanup
為始終替換為最后一個值。
嘗試
string cleanup =input;
foreach (Match match in matches)
{
// clean the ini
cleanup = Regex.Replace(cleanup, match.Value, "");
// Output all matches
textBox2.Text = textBox2.Text + "\n" + match.Value;
}
更好的解決方案是使用Linq:
Regex regex=new Regex(@"^FensterGemerkt.+?\d+\.\d+\.\d+\,\ \d{2}:\d{2}:\d{2}\ :\ -{1}?\d+\,.*?$"; //@"^Fenster.*$",RegexOptions.MultiLine);
string cleanup=regex.Replace(input,string.Empty);
string[] matches=regex.Matches(input).OfType<Match>().Select(m=>m.Value).ToArray();
txtb_count.Text = Convert.ToString(matches.Length);
textBox2.Text = string.Join('\n',matches);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.