【问题标题】:C# Trouble with Regex.Replace正则表达式的 C# 问题。替换
【发布时间】:2013-11-29 12:25:22
【问题描述】:

一整天都在为这个问题挠头!

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

?\"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”)。所以这导致我考虑使用“*”或“+”表达式而不是“。” ,但是我预见到了在所需字符之间拾取 all 文本的问题(这些字符遍布整个地方),而我显然只想用它们之间的数字字符替换那些文本。

希望我已经解释得足够清楚,如果需要,我很乐意提供任何额外的信息:)

【问题讨论】:

  • 您只想替换宽度元素和边框元素和样式元素中的\?

标签: c# regex string


【解决方案1】:

试试这个

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

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

【讨论】:

  • 啊,好朋友,我现在明白我应该一直在寻找反向引用。完美运行。
【解决方案2】:

这行得通

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());

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多