整天都在为这个问题喋喋不休!
好的,所以我有一个包含以下内容的字符串:
?\"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 \”)。所以这让我想到使用“*”或“+”表达式而不是“。”但是,我预见到在所需的字符(遍布整个地方的点缀)之间拾取所有文本的问题,而我显然只想替换它们之间的数字字符。
希望我已经清楚地解释了这一点,如果需要,将很乐意提供任何额外信息:)
答案 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());