2011-07-23 37 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]));