簡體   English   中英

Regex.Replace 不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM