2012-01-15 56 views
2

我使用下面的正則表達式模式[code][/code]標籤之間找到文本標記替換它一起:查找標籤之間的文本,並與

(?<=[code]).*?(?=[/code]) 

它返回我什麼這是這兩個標記之間封閉,例如這個:[code]return Hi There;[/code]給我return Hi There;

我需要幫助與正則表達式替換整個文字沿與標籤。

+0

你能不能m礦石具體?提供樣品。 – 2012-01-15 11:00:10

+0

例如,我想用其他文本替換** [code]和[[code] **中包含的所有文本)。我只是設法得到這個工作@「[code]。*?[/ code] ...可以進一步改進嗎? – 2012-01-15 11:06:40

+0

這個'\ [code]。*?\ [/ code]'模式有什麼問題? – 2012-01-15 11:08:20

回答

6

使用該做這樣的事情

string matchCodeTag = @"\[code\](.*?)\[/code\]"; 
string textToReplace = "[code]The Ape Men are comming[/code]"; 
string replaceWith = "Keep Calm"; 
string output = Regex.Replace(textToReplace, matchCodeTag, replaceWith); 

看看這個網站:

var s = "My temp folder is: [code]Path.GetTempPath()[/code]"; 

var result = Regex.Replace(s, @"\[code](.*?)\[/code]", 
    m => 
     { 
      var codeString = m.Groups[1].Value; 

      // then you have to evaluate this string 
      return EvaluateMyCode(codeString) 
     }); 
+0

完美,謝謝你... – 2012-01-16 04:51:05

+0

@VinayDwivedi,不客氣。 – 2012-01-16 04:52:07

+0

還有一點,我可以使用[],但是使用<>卻給我一個例外System.ArgumentException:解析「\ (.*?)\」 - 引用未定義的組名代碼... – 2012-01-16 05:19:34

1

您需要使用回參考點,即具有類似<code>$1</code>它會給你什麼是被封閉在[code][/code]標誌包圍取代\[code\](.*?)\[/code\] - 這個例子 - <code></code>標籤。

+0

對不起,我錯過了一個觀點,\ [code]。*?\ [/ code]替換了字符串中的所有可能有多個標籤的東西,標籤包含c#代碼,必須執行並替換爲它返回的字符串,所以[code]以及[#code]裏面[/ code]裏面的東西必須用返回值替換 – 2012-01-16 03:56:42

4

我會用這個HTML解析器。我可以看到你想要做的事情很簡單,但是這些事情都有一個習慣,讓加班變得更加複雜。最終的結果對於將來必須維護代碼的可憐的唯一人來說是非常痛苦的。

看看關於HTML解析器這個問題
What is the best way to parse html in C#?

[編輯]
這裏是一個更相關的回答提出的問題。 @Milad Naseri正則表達式是正確的,你只需要更多的例子
http://www.dotnetperls.com/regex-replace
http://oreilly.com/windows/archive/csharp-regular-expressions.html

希望這有助於

+0

我同意最好是有一個解析器而不是正則表達式,因爲parentese匹配是非常脆弱的正則表達式並用[code]和)代替[/ code]並不會改變這種情況因爲發佈不是HTML,所以我不能看到HTML解析如何在這裏幫助 – 2012-01-15 11:49:54

+0

@Rune FS道歉我在這裏做了一個假設,實際上是一個相當大的假設。你有沒有考慮過像regex buddy http://www.regexbuddy.com/這樣的工具,它花費30歐元,但非常值得的錢。 – TheLukeMcCarthy 2012-01-15 12:31:26

+0

如果原始字符串包含\ n,\ r ....會怎麼樣? – HappyLiang 2017-12-19 18:36:57