C#Regex如何用«和»分别替换字符串中的多个引号

时间:2018-03-14 12:02:08

标签: c# regex

我想替换某些字符串中的引号。虽然,这必须分别使用«»来完成。不明确的是它会以引号开头和结尾。

例如我有这个字符串:

  

“这就是”内在的“主要的”内在的“句子”

我想将其更改为:

  

«这就是«inner1»主要«inner2»SENTENCE»

SOLUTION:

musefan的帮助下(代码与他原来的解决方案有点不同,因为不确定字符串是以引号开头还是结尾)。它不是通过以某种方式链接引号对来完成的,而是在它们跟随或后跟空格时替换它们,然后检查并在必要时将替换应用于所提供的字符串的第一个和最后一个字符。

using System;
public class Test
{
    public static void Main()
    {
        string input = "\"THIS IS \"inner1\" THE MAIN \"inner2\" SENTENCE\"";
        string result=input;
        //Replace quotes that follow space with « and replace quotes that precede space with »
        result = result.Replace(" \"", " «").Replace("\" ", "» ");

        //if first character is " then replace with «
        if (result.Substring(0, 1) == "\"")
            result = "«" + result.Substring(1);

        //get last character of the string
        char last = result[result.Length - 1];
        //if it is " then replace it with »
        if (last.ToString() == "\"")
            result = result.Remove(result.Length - 1) + "»";

        Console.WriteLine(result);
    }
}

1 个答案:

答案 0 :(得分:2)

主要问题是:您如何知道报价何时应该是新产品的开头,还是现有报价的结束?有许多可能需要不同处理的用例。

所以,我假设如果引号是新集的开头,或者如果它是现有集的结尾,那么你将使用空格字符来计算。这种假设的原因是确保获得理想结果是最明显的逻辑。

考虑到这一点,它变得非常简单:

// First remove the out quotes, we will manually change them at the end.
string result = input.Substring(1, input.Length - 2);
// Replace quotes that follow space with « and replace quotes that precede space with »
result = result.Replace(" \"", " «").Replace("\" ", "» ");
// Add the outer chevrons around the result.
result = string.Format("«{0}»", result);

Here is a working example

免责声明:请注意,此答案是根据您提供的示例数据提供的。有许多可能的输入可能需要重新考虑规则/逻辑以实现期望的结果。但是,如果不了解这些额外要求,我无法满足这一要求。

如果您有更具体的要求,请随时编辑您的问题,我会尝试更新我的答案,但您可能需要提示我发表评论,以便我知道您已更改了您的要求。