[英]How to extract range of characters from a string
如果我有如下字符串:
String myString = "SET(someRandomName, \"hi\", u)";
我知道"SET("
将始终存在于字符串中,但"someRandomName"
的长度是未知的,我将如何 go 关于删除从"("
到"""
的第一个实例的所有字符? -迭代,我想从myString
中删除这个 substring: "SET(someRandomName, \""
。
我将如何在 C#.Net 中执行此操作?
编辑:我不想为此使用正则表达式。
提供字符串将始终具有此结构,最简单的方法是使用String.IndexOf()
查找"
String.Substring()
的第一个出现的索引,然后为您提供原始字符串的适当部分。
同样,你可以使用String.LastIndexOf()
找到第一的指数"
从字符串的结尾 。然后你就可以提取第二个参数的值( "hi"
你的样品中)。
你最终会得到这样的东西:
int begin = myString.IndexOf('"');
int end = myString.LastIndexOf('"');
string secondArg = myString.Substring(begin, end - begin + 1);
这将在secondArg
产生"\\"hi\\""
。
更新 :要删除字符串的一部分,请使用String.Remove()
方法:
int begin = myString.IndexOf('(');
int end = myString.IndexOf('"');
string altered = myString.Remove(begin + 1, end - begin - 1);
这将产生"SET(\\"hi\\", u)"
中的altered
。
我假设你想改造
SET(someRandomName, "hi", u)
成:
SET(u)
为此,您可以使用:
String newString = "SET(" + myString.Substring(myString.LastIndexOf(',') + 1).Trim();
为了解释这一点:
myString.LastIndexOf(',')
会给你最后的索引(位置) ,
字符。 将其递增1以获取SET
函数中第三个参数的起始索引。
myString.Substring(myString.LastIndexOf(',') + 1)
Substring
方法将消除指定位置的所有字符。 在这种情况下,我们将消除所有内容(包括最后一个,
。 在上面的例子中,这将消除SET(someRandomName, "hi",
part,并留给我们u)
。
该Trim
是必要的仅仅是你之前删除前导空格字符u
。
最后,我们预先SET(
到我们的子串(因为我们之前由于我们的Substring
而删除了它)。
编辑 :根据您的评论
(与您在问题中提到的内容相矛盾)
,您可以使用:
String newString = "SET(" + myString.Substring(myString.IndexOf(',') + 1).Trim();
这非常糟糕,但这可以通过简单的linq语句实现您的目标。 只是作为IndexOf
答案的替代方案。
string myString = "SET(someRandomName, \"hi\", 0)";
string fixedStr = new String( myString.ToCharArray().Take( 4 ).Concat( myString.ToCharArray().SkipWhile( c => c != '"' ) ).ToArray() );
产量:SET(“hi”,0)
注意:跳过硬编码为4个字符,您可以改变它以跳过包含它们的数组中的字符。
我知道已经有好几年了,但是.Net 也同时发展了。 考虑使用范围运算符,以防有人在这里寻找答案。
假设Set(
和\"hi\", u)
是常数值(没有转义的 8 位数字):
var sub = myString[^4...^8];
myString.Replace(sub, replaceValue);
本文或微软文档中的更多示例和很好的解释
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.