C# 在字符串中添加空格,但不能在引号之间添加空格

C# 在字符串中添加空格,但不能在引号之间添加空格,c#,string,c#-4.0,tokenize,C#,String,C# 4.0,Tokenize,我有这个字符串: string myString = "do Output.printString(\"Do you want to Hit (h) or Stand (s)?\");"; 我的字符串为纯文本: do Output.printString(“您想点击(h)还是站立?” 我想做到: 做输出。打印字符串(“Do@you@want@to点击@(h)@or@Stand@(s) ?” 这个想法是每个单词之间都有一个空格,但是如果撇号中有一个字符串,我希望它是没有空格的,在这个函数之后,我

我有这个字符串:

string myString = "do Output.printString(\"Do you want to Hit (h) or Stand (s)?\");";
我的字符串为纯文本:

do Output.printString(“您想点击(h)还是站立?”

我想做到:

做输出。打印字符串(“Do@you@want@to点击@(h)@or@Stand@(s) ?”

这个想法是每个单词之间都有一个空格,但是如果撇号中有一个字符串,我希望它是没有空格的,在这个函数之后,我可以做:

s.Split(' ');
然后把字符串放在一个字符串中

我所做的是:

 public static string PrepareForSplit(this string s)
    {
        string ret = "";
        if (s.Contains("\""))
        {
            bool equalsAppear = false;
            foreach (var nextChar in s)
            {
                char charToConcat;
                if (nextChar == '"')
                {
                   equalsAppear= equalsAppear == true ? false : true;
                }

                if (nextChar == ' ' && equalsAppear)
                {

                    charToConcat = '@';

                }
                else
                {
                    charToConcat = nextChar;
                }
                ret += charToConcat;
            }

        }

        if (String.IsNullOrWhiteSpace(ret))
            ret = s;
        string[] symbols = {"{", "}", "(", ")", "[", "]", ".",
    ",", ";", "+", "-", "*", "/", "&", "|", "<", ">", "=", "~","#"};

        foreach(var symbol in symbols)
        if(ret.Contains(symbol))
        {
            if (!ret.Contains('"') || !((symbol=="-") || symbol==","))
            {
                ret = ret.Replace(symbol, " " + symbol + " ");
            }
        }
        if(ret.Contains("\t"))
        {
            ret = Regex.Replace(ret, @"\t", " ");
        }

        return ret;

    }
公共静态字符串PrepareForSplit(此字符串为s)
{
字符串ret=“”;
如果(s.包含(“\”)
{
bool equalsequent=false;
foreach(s中的变量nextChar)
{
Chart charToConcat;
如果(nextChar==“”)
{
EqualsAspect=EqualsAspect==真?假:真;
}
如果(nextChar==''&&EqualsExeen)
{
charToConcat='@';
}
其他的
{
charToConcat=nextChar;
}
ret+=charToConcat;
}
}
if(String.IsNullOrWhiteSpace(ret))
ret=s;
字符串[]符号={“{”、“}”、“(“,”)、“[”、“]”、“,
",", ";", "+", "-", "*", "/", "&", "|", "", "=", "~","#"};
foreach(符号中的变量符号)
如果(返回包含(符号))
{
如果(!ret.Contains(“”)| |!((symbol==“-”)| | symbol==“,”)
{
ret=ret.Replace(符号“+”符号+”);
}
}
如果(ret.Contains(“\t”))
{
ret=Regex.Replace(ret、@“\t”和“”);
}
返回ret;
}
我的问题是,在这个函数的末尾,我得到了以下字符串:

执行输出。打印字符串(“Do@you@want@to@点击@(h)@or@Stand@(s);


正如你在假设没有空格的字符串中看到的,我有空格,然后我的程序就不能正常运行了。有人请帮忙!

我会使用正则表达式来提取你的字符串

您可能会这样输入起始字符串:

string source = "do Output.printString(\"Do you want to Hit (h) or Stand (s)?\");";
请尝试以下正则表达式:

\("([^\"]+)
圆括号之间的组(即捕获组)是您要查找的

编辑:像这样使用它(基于)


Edit2:现在可以工作了:-)

我会使用正则表达式来提取字符串

您可能会这样输入起始字符串:

string source = "do Output.printString(\"Do you want to Hit (h) or Stand (s)?\");";
请尝试以下正则表达式:

\("([^\"]+)
圆括号之间的组(即捕获组)是您要查找的

编辑:像这样使用它(基于)


Edit2:现在可以工作了:-)

我会使用正则表达式来提取字符串

您可能会这样输入起始字符串:

string source = "do Output.printString(\"Do you want to Hit (h) or Stand (s)?\");";
请尝试以下正则表达式:

\("([^\"]+)
圆括号之间的组(即捕获组)是您要查找的

编辑:像这样使用它(基于)


Edit2:现在可以工作了:-)

我会使用正则表达式来提取字符串

您可能会这样输入起始字符串:

string source = "do Output.printString(\"Do you want to Hit (h) or Stand (s)?\");";
请尝试以下正则表达式:

\("([^\"]+)
圆括号之间的组(即捕获组)是您要查找的

编辑:像这样使用它(基于)


Edit2:现在它可以工作了:-)

我建议您在撇号处拆分整个字符串。这将更容易区分撇号内的部分和其他部分

string[] parts = s.Split('"');
现在你有:

part[0] ==> "do Output . printString ("
part[1] ==> "Do@you@want@to Hit@(h)@or@Stand@(s)?"
part[2] ==> ");"
即,
部分[]
中的偶数索引在撇号之外,奇数索引在撇号之内

// Treat the parts not between apostrophes:
for (int i = 0; i < parts.Length; i += 2) {
    part[i] = InsertSpacesBetweenWords(part[i]); 
}

string result = String.Join("\"", part);


通过使用逻辑NOT运算符

我建议您在撇号处拆分整个字符串。这将更容易区分撇号内的部分和其他部分

string[] parts = s.Split('"');
现在你有:

part[0] ==> "do Output . printString ("
part[1] ==> "Do@you@want@to Hit@(h)@or@Stand@(s)?"
part[2] ==> ");"
即,
部分[]
中的偶数索引在撇号之外,奇数索引在撇号之内

// Treat the parts not between apostrophes:
for (int i = 0; i < parts.Length; i += 2) {
    part[i] = InsertSpacesBetweenWords(part[i]); 
}

string result = String.Join("\"", part);


通过使用逻辑NOT运算符

我建议您在撇号处拆分整个字符串。这将更容易区分撇号内的部分和其他部分

string[] parts = s.Split('"');
现在你有:

part[0] ==> "do Output . printString ("
part[1] ==> "Do@you@want@to Hit@(h)@or@Stand@(s)?"
part[2] ==> ");"
即,
部分[]
中的偶数索引在撇号之外,奇数索引在撇号之内

// Treat the parts not between apostrophes:
for (int i = 0; i < parts.Length; i += 2) {
    part[i] = InsertSpacesBetweenWords(part[i]); 
}

string result = String.Join("\"", part);


通过使用逻辑NOT运算符

我建议您在撇号处拆分整个字符串。这将更容易区分撇号内的部分和其他部分

string[] parts = s.Split('"');
现在你有:

part[0] ==> "do Output . printString ("
part[1] ==> "Do@you@want@to Hit@(h)@or@Stand@(s)?"
part[2] ==> ");"
即,
部分[]
中的偶数索引在撇号之外,奇数索引在撇号之内

// Treat the parts not between apostrophes:
for (int i = 0; i < parts.Length; i += 2) {
    part[i] = InsertSpacesBetweenWords(part[i]); 
}

string result = String.Join("\"", part);


通过使用逻辑NOT运算符

您可以使用正则表达式来实现这一点。如何编写正则表达式?如何打印引号?打印字符串是我字符串的一部分,我将更新这个问题,它将更加清楚…当您说“撇号”(
)时,您是指“括号”(
)你可以用正则表达式来做。怎么做?你能写正则表达式吗?如何打印引号?打印字符串是我字符串的一部分,我会更新这个问题,它会更清楚…当你说“撇号”(
)时,你是指“括号”(
()
)你可以用正则表达式来做。怎么做?你能写正则表达式吗?如何打印引号?打印字符串是我字符串的一部分,我会更新这个问题,它会更清楚…当你说“撇号”(
)时,你是指“括号”(
()
)你可以用正则表达式来做。怎么做?你能写正则表达式吗?如何打印引号?打印字符串是我字符串的一部分,我会更新这个问题,它会更清楚…当你说“撇号”(
)时,你是指“括号”(
)吗