Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中删减双引号的最佳方法是什么#_C#_String - Fatal编程技术网

C# 在C语言中删减双引号的最佳方法是什么#

C# 在C语言中删减双引号的最佳方法是什么#,c#,string,C#,String,我有一个字符串“”“”,我需要修剪开头和结尾的“,并获取值”,最好的方法是什么 如果我只使用mystring.Substring(1,1)和Substring(mystring.Length-2,1)取第一个和最后一个字符,并与“进行比较,如果它们相等,则再次取该字符串的子字符串,这太复杂了吗?有没有简单的方法来修剪第一个和最后一个“并保留数据值”?多谢各位 更新: “将是一种情况,对于任何另一个用“,”包装的字符串,我可以只修剪(“),但是如果我对它做同样的事情,它将是空的,并且我不知道以后会

我有一个字符串
“”“
”,我需要修剪开头和结尾的
,并获取值
,最好的方法是什么

如果我只使用
mystring.Substring(1,1)
Substring(mystring.Length-2,1)
取第一个和最后一个字符,并与
进行比较,如果它们相等,则再次取该字符串的子字符串,这太复杂了吗?有没有简单的方法来修剪第一个和最后一个
并保留数据值
?多谢各位

更新:
将是一种情况,对于任何另一个用“,”包装的字符串,我可以只
修剪(“)
,但是如果我对它做同样的事情,它将是空的,并且我不知道以后会得到哪种模式,如果有
“。或
”等


所以简而言之,不管这个字符串看起来是什么样子,我只需要修剪第一个和最后一个
,但是对于任何像
”、
“…
”这样的字符串,我不希望值为空。

您应该使用
Regex.Replcae
,应该是这样的:

string pattern = @"\".*\"";
string replacement = "";
string input = ""asdf""asf"";
string result = Regex.Replace(input, pattern, replacement);

与大多数相似的问题一样,正则表达式是答案。这里是一个字符串的扩展方法,它不引用字符串(意思是‘xxx’到xxx和yyy’到yyy),它不关心字符串中间的不可逃避的引文(例如,“to to”或“to to”)。,但这通常是一个单独的练习,使用不同的方法。此练习还删除任何前导空格

    /// <summary> Remove single or double quotes around an entry if any.  This also trims leading and trailing whitespace so
    ///           it's more like a positional parameter filter than pure unquoting. </summary>
    /// <param name="target"> Target string to unquote</param>
    /// <returns>             Trimmed and Unquoted string</returns>
    public static string UnQuote(this string target)
        => Regex.Replace(target, @"^\s*([\x22\x27])(.*)\1\s*$", "${2}");
///删除条目周围的单引号或双引号(如果有)。这也会修剪前导和尾随空格,以便
///它更像是一个位置参数过滤器,而不是纯粹的取消引用。
///要取消引号的目标字符串
///修剪和不带引号的字符串
公共静态字符串UnQuote(此字符串目标)
=>Regex.Replace(目标,@“^\s*([\x22\x27])(.*)\1\s*$”,“${2}”);
这样做:

class Program
{
    static void Main(string[] args)
    {
        string str = "\"\"\"";
        str = TrimValueFromString("\"", str);
    }

    private static string TrimValueFromString(string value, string original)
    {
        string trimmed = original;
        if(original.IndexOf(value) == 0)
        {
            trimmed = original.Substring(value.Length);
        }
        if(trimmed.LastIndexOf(value) == (trimmed.Length - value.Length))
        {
            trimmed = trimmed.Substring(0, trimmed.LastIndexOf(value));
        }
        return trimmed;
    }
}
输入:

“”“

输出:

"


使用此实现,如果重复该值,您将能够修剪每个字符串而无需剪切,还有另一个示例:

class Program
{
    static void Main(string[] args)
    {
        string str = "asdciccioasdciccioasd";
        str = TrimValueFromString("asd", str);
    }

    private static string TrimValueFromString(string value, string original)
    {
        string trimmed = original;
        if(original.IndexOf(value) == 0)
        {
            trimmed = original.Substring(value.Length);
        }
        if(trimmed.LastIndexOf(value) == (trimmed.Length - value.Length))
        {
            trimmed = trimmed.Substring(0, trimmed.LastIndexOf(value));
        }
        return trimmed;
    }
}
输入:

ASDASDCICCIOSDCICCIOSDASD

输出:

asdcicciasdcicciasd


始终是您的第一个和最后一个字符
?您提到的获取第一个/最后一个字符的两种方法都应该返回中间的一种。这是故意的还是我误读了这个问题?为什么不使用regex replace,比如/^\“|\”$/?我认为这个问题中缺少了一些东西hi@TimSchmelter,
将是一种情况,对于任何用
包装的字符串,我可以
修剪(“”)
,但是如果我对它做同样的事情,它将是空的,并且我不知道以后会得到哪个模式,如果有
“”
。或者
,等等OP也想处理不可回避的引号,这是主要问题。