删除引号之间的文本

Remove text between quotes

我有一个程序,你可以在其中输入一个字符串。但我想删除引号 " " 之间的文本。

示例:

in: Today is a very "nice" and hot day.

out: Today is a very "" and hot day.

        Console.WriteLine("Enter text: ");
        text = Console.ReadLine();

        int letter;
        string s = null;
        string s2 = null;
        for (s = 0; s < text.Length; letter++)
        {
            if (text[letter] != '"')
            {
                s = s + text[letter];
            }
            else if (text[letter] == '"')
            {

                s2 = s2 + letter;
                letter++;
                (text[letter] != '"')
                {
                    s2 = s2 + letter;
                    letter++;
                }
            }
        }

我不知道如何将引号之间没有文本的字符串写入控制台。 我不允许使用像正则表达式这样的复杂方法。

一个没有正则表达式的片段,我更喜欢这样,但是还可以:

string input = "abc\"def\"ghi";
string output = input;

int firstQuoteIndex = input.IndexOf("\"");

if (firstQuoteIndex >= 0)
{
    int secondQuoteIndex = input.IndexOf("\"", firstQuoteIndex + 1);

    if (secondQuoteIndex >= 0)
    {
        output = input.Substring(0, firstQuoteIndex + 1) + input.Substring(secondQuoteIndex);
    }
}

Console.WriteLine(output);

它的作用:

  • 它搜索第一次出现的 "
  • 然后搜索第二次出现的 "
  • 然后取第一部分,包括第一部分"和第二部分,包括第二部分"

您可以通过搜索直到字符串末尾并替换所有出现的地方来自己改进它。您必须记住要搜索的新 'first index'。

这可能是一个解决方案:

String cmd = "This is a \"Test\".";
// This is a "".
String newCmd = cmd.Split('\"')[0] + "\"\"" + cmd.Split('\"')[2];
Console.WriteLine(newCmd);
Console.Read();

您只需在 " 处拆分文本,然后将两个部分加在一起并添加旧的 "。这不是一个很好的解决方案,但它仍然有效。

€编辑:

cmd[0] = "This is a "
cmd[1] = "Test"
cmd[2] = "."

你可以这样做:

Console.WriteLine("Enter text: ");
var text = Console.ReadLine();

var skipping = false;

var result = string.Empty;

foreach (var c in text)
{
    if (!skipping || c == '"') result += c;
    if (c == '"') skipping = !skipping;
}

Console.WriteLine(result);

Console.ReadLine();

结果字符串是通过添加原始字符串中的字符创建的,只要我们不在引号之间(使用 skipping 变量)。

这应该可以解决问题。它检查字符串中的每个字符是否有引号。 如果找到引号,则将 quotesOpened 标志设置为 true,因此它将忽略任何后续字符。

当它遇到另一个引号时,它将标志设置为false,因此它会继续复制字符。

Console.WriteLine("Enter text: ");
text = Console.ReadLine();

int letterIndex;
string s2 = "";
bool quotesOpened = false;
for (letterIndex= 0; letterIndex< text.Length; letterIndex++)
{
    if (text[letterIndex] == '"')
    {
        quotesOpened = !quotesOpened;

        s2 = s2 + text[letterIndex];
    }
    else 
    {
        if (!quotesOpened)
            s2 = s2 + text[letterIndex];
    }
}

希望对您有所帮助!

首先我们需要拆分字符串,然后删除奇数项:

    private static String Remove(String s)
    {
        var rs = s.Split(new[] { '"' }).ToList();
        return String.Join("\"\"", rs.Where(_ => rs.IndexOf(_) % 2 == 0));
    }

    static void Main(string[] args)
    {
        var test = Remove("hello\"world\"\"yeah\" test \"fhfh\"");
        return;
    }

获取引号的所有索引使用子字符串删除引号之间的文本。

    static void Main(string[] args)
    {
        string text = @" Today is a very ""nice"" and hot day. Second sentense with ""text"" test";

        var foundIndexes = new List<int>();
        foundIndexes.Add(0);
        for (int i = 0; i < text.Length; i++)
        {
            if (text[i] == '"') 
                foundIndexes.Add(i);

        }

        string result = "";

        for(int i =0; i<foundIndexes.Count; i+=2)
        {
            int length = 0;

            if(i == foundIndexes.Count - 1)
            {
                length = text.Length - foundIndexes[i];
            }
            else
            {
                length = foundIndexes[i + 1] - foundIndexes[i]+1;
            }
            result += text.Substring(foundIndexes[i], length);

        }

        Console.WriteLine(result);
        Console.ReadKey();
    }

Output: Today is a very "" and hot day. Second sentense with "" test";

这里dotNetFiddle

string text = @" Today is a very ""nice"" and hot day. Second sentense with ""text"" test";
Regex r = new Regex("\"([^\"]*)\"");
var a = r.Replace(text,string.Empty);

请试试这个。