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也想处理不可回避的引号,这是主要问题。