【问题标题】:C# Replace text within double quoteC# 替换双引号内的文本
【发布时间】:2020-11-13 18:40:22
【问题描述】:

这是我在这个论坛的第一篇文章。我有一个双精度文本,我想用另一个文本替换它。

这是我的全文

“运营指标~Copper C1 现金成本(美元/磅)-Lalor~9999”*“运营指标~加元(加元/美元)~9999”

此文本“Operational Metrics~Copper C1 Cash Costs (US$/lb) - Lalor~9999” 将替换为 Excel 单元格地址 A10

我尝试过这种方式,但无法替换双引号内的文本。我的代码中肯定有我无法修复的问题。

string mainstr = "\"" + "Operational Metrics~Copper C1 Cash Costs (US$/lb) - Lalor~9999" + "\"" + "*" + "\"" + "Operational Metrics~Canadian Dollars (Canadian $/US$)~9999" + "\"";
string replacesfrom = "\"" + "Operational Metrics~Copper C1 Cash Costs (US$/lb) - Lalor~9999" + "\"";
string replacesto = "A10";
string afterreplace = Regex.Replace(mainstr, replacesfrom, replacesto);

期望的输出将是。

"A10"*"Operational Metrics~Canadian Dollars (Canadian $/US$)"

我也试过这个逻辑,但还是没有运气。

public static string ReplaceWholeWord(this string original, string wordToFind, string replacement, RegexOptions regexOptions = RegexOptions.None)
        {
            string pattern = String.Format(@"\b{0}\b", wordToFind);
            string ret = Regex.Replace(original, pattern, replacement, regexOptions);
            return ret;
        }

使用上述功能,我尝试替换,但遗憾的是无法替换文本 Operational Metrics~Copper C1 Cash Costs (US$/lb) - LalorA10

请建议我在上面的代码中要更改的内容。

【问题讨论】:

  • 这里不需要正则表达式,因为您只是替换静态子字符串; string.Replace 应该足够了。如果必须使用正则表达式,则需要注意括号、美元和正斜杠字符具有特殊含义,需要转义。

标签: c#


【解决方案1】:

Regex.Replace 的工作方式与 String.Replace 不同。 使用

string afterreplace = mainstr.Replace(replacesfrom, replacesto);

【讨论】:

  • +1,比我不必要地使用正则表达式的答案更好......另外,here 是一个指向显示此作品的 dotnetfiddle 的链接
  • 更换可能会产生问题。我需要用双引号替换文本。假设可能有像“Z1”+“Z12”这样的文本替换将用A10替换Z1。那么输出将是“A10”+“A102”这就是我不使用替换功能的原因。我需要用双引号替换找出文本。替换功能可能在一段时间内不起作用并产生问题。
【解决方案2】:

如果您非常想使用 Regex,请继续阅读。如果没有,请参阅Yaroslav's answer


问题是您已经转义了正则表达式特殊字符,即()$/

您当前的正则表达式是Operational Metrics~Copper C1 Cash Costs (US$/lb) - Lalor~9999 包含特殊字符(Regexr explains them better),基本上() 表示捕获组$ 表示字符串的结尾。这意味着我们必须使用\ 来逃避它们。这意味着您的正则表达式 (replacesfrom) 现在是

@"""Operational Metrics~Copper C1 Cash Costs \(US\$\/lb\) - Lalor~9999"""

Here 是一个 dotnetfiddle,表明它可以工作

【讨论】:

  • 感谢您的提琴。我怎样才能以您在 string replacesfrom = @"""Operational Metrics~Copper C1 Cash Costs \(US\$\/lb\) - Lalor~9999"""; 文本中硬编码的方式转义所有特殊字符
  • $ 应该替换为 \$\ 吗?括号应替换为 ( & ) ?
  • 没有。在正则表达式中转义与在普通字符串中转义相同,只是单个 \` followed by the character you want to escape. I.E \"` 在字符串中转义 "\$ 在正则表达式中转义 $。我只是使用了逐字字符串 (@"...") 所以我不必转义转义 (\) 字符。我分别转义了字符 ($/)
  • 我怎么能有通用例程,我会调用它来替换所有特殊字符。请建议一个代码示例或任何指导我替换特殊字符的链接。谢谢
  • 快速谷歌搜索让我找到了Regex.Escape
【解决方案3】:

首先,您的字符串示例中不需要“+”:

string replacesfrom = "\"" + "Operational Metrics~Copper C1 Cash Costs (US$/lb) - Lalor" + "\"";

可能是:

string replacesfrom = "\"Operational Metrics~Copper C1 Cash Costs (US$/lb) - Lalor\"";

我能理解的是,这就是你需要的,替换:

string afterreplace = mainstr.Replace(replacesfrom, replacesto)

如果您不知道如何获取手机地址,这应该可以:How can i get the Cell address from excel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多