[英]Regex.Replace not working
我在 Regex.Replace 上遇到了一個奇怪的問題
string test = "if the other party is in material breach of such contract and, after <span style=\"background-color:#ffff00;\">forty-five (45)</span> calendar days notice of such breach";
string final = Regex.Replace(test, "forty-five (45)", "forty-five (46)", RegexOptions.IgnoreCase);
“最終”字符串仍顯示“四十五 (45)”。 知道為什么嗎? 我假設它必須對標簽做一些事情。 我該如何解決?
謝謝
轉義括號。 根據語言,可能需要兩個反斜杠。
string final = Regex.Replace(test, "forty-five \(45\)", "forty-five (46)", RegexOptions.IgnoreCase);
基本上,括號被定義為表示某些東西,通過轉義字符,您告訴正則表達式使用括號字符,而不是含義。
更好的是,您為什么要使用正則表達式來執行此操作? 嘗試做一個普通的字符串替換。
string final = test.Replace("forty-five (45)", "forty-six (46)")
括號在正則表達式中很特殊。 它們划定一個組,以允許諸如交替之類的事情。 例如,正則表達式foo(bar|bat)baz
匹配:
foo
,然后是bar
要么bat
,然后是baz
因此,像foo(bar)
這樣的正則表達式永遠不會匹配文字字符串foo(bar)
。 它將匹配的是文字字符串foobar
。 因此,您需要轉義元字符。 在 C# 中,你應該這樣做:
string final = Regex.Replace(test, @"forty-five \(45\)", "forty-five (46)", RegexOptions.IgnoreCase);
@-quoted 字符串有助於避免過多反斜杠引起的麻煩。 沒有它,你必須寫“四十五\\(45\\)”。
如果您無法轉義括號,請將它們放在字符類中:
forty-five [(]45[)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.