C#与Regex.Replace有关

时间:2013-11-29 12:25:23

标签: c# regex string

整天都在为这个问题喋喋不休!

好的,所以我有一个包含以下内容的字符串:

?\"width=\"1\"height=\"1\"border=\"0\"style=\"display:none;\">');

我想将该字符串转换为以下内容:

?\"width=1height=1border=0style=\"display:none;\">');
理论上我可以在“\”1 \“”等上做一个String.Replace。但这不是一个可行的选项,因为理论上字符串在表达式中可以有任何数字。

我还想过删除字符串“\”“,但是还有其他一些我不想被替换的事情。

我一直在尝试使用Regex.Replace方法,因为我相信这可以解决我的问题。这就是我所拥有的:

chunkContents = Regex.Replace(chunkContents, "\".\"", ".");

现在真的搞砸了(它取代了正确的元素,但是完全停止了),但我认为你可以看到我尝试做什么。我也担心这只适用于单个数字(\“1 \”而不是\“11 \”)。所以这让我想到使用“*”或“+”表达式而不是“。”但是,我预见到在所需的字符(遍布整个地方的点缀)之间拾取所有文本的问题,而我显然只想替换它们之间的数字字符。

希望我已经清楚地解释了这一点,如果需要,将很乐意提供任何额外信息:)

2 个答案:

答案 0 :(得分:3)

试试这个

var str = "?\"width=\"1\"height=\"1234\"border=\"0\"style=\"display:none;\">');";
str = Regex.Replace(str , "\"(\\d+)\"", "$1");

(\\d+)是一个捕获组,它会查找一个或多个数字,$ 1引用该组捕获的内容。

答案 1 :(得分:1)

这有效

String input = @"?\""width=\""1\""height=\""1\""border=\""0\""style=\""display:none;\"">');";

//replace the entire match of the regex with only what's captured (the number)
String result = Regex.Replace(input, @"\\""(\d+)\\""", match => match.Result("$1"));

//control string for excpected result
String shouldBe = @"?\""width=1height=1border=0style=\""display:none;\"">');";

//prints true
Console.WriteLine(result.Equals(shouldBe).ToString());