2011-07-23 68 views
0

我想寫一個正則表達式,將採取以下形式的字符串模式:替換爲「」

<123>, ;<123>:::,<123> 

,其中123是一些數字和數字之間是一些標點符號。

我需要一個正則表達式將替換爲「」數字領域之間的所有標點符號。

我嘗試這樣做:

Regex.Replace(s, ">.*<", ""); 

但沒有運氣。什麼正則表達式可以完成這個?

編輯:我原來的正則表達式是有點誤導,對不起!正如評論者說,我在尋找< 123> < 123> < 123>

回答

2

不能確定確切的C#語法下去,但如果你的字符串保證不會有那些尖括號以外的號碼,那麼你就應該能與此逃脫:

Regex.Replace(s, "[^\d<>]*", ""); 

因此,刪除任何非數字或「<」或「>」的東西。如果您還想刪除尖括號,則更簡單:

Regex.Replace(s, "[^\d]*", ""); 
2

你需要讓.*部分非貪婪,否則會拿起第一>最後<之間的一切在你的字符串中。嘗試是這樣的:

Regex.Replace(s, ">.*?<", ""); 

這將清除><字符也。如果您想保留這些:

Regex.Replace(s, ">.*?<", "><"); 
+0

你不需要' @' - 它們被用來忽略轉義字符:'「\\ d」''主場迎戰@「\ d」'這應該做的,但輸出'「<123123123>」',這是奇怪的,雖然它看起來像。 OP要求什麼 – Kobi

+1

@Kobi聽起來像OP預計'「<123><123><123>「' –

+0

@Kobi:感謝您的語法提示! – Mat

0

您應該按照建議使用括號。但我沒有得到你想要取代的東西。

string s = "<123>, ;<123>:::,<123>"; 

s = (new Regex("[<>:, ;]")).Replace(s, "\""); 

最終的字符串將是;

「123」 「」 「」 123 「」 「」 「」 123"

1

這兩個應該工作:

Regex.Replace(s, @"(\>|^).*?($|\<(?=\d{3}\>))", "$1$2"); 

String.Concat(Regex.Matches(s, @"\<\d{3}\>") 
      .OfType<Match>().Select(a => a.Groups[0]));