如何得到一个字符串的特定部分在C#
我有一个字符串如何得到一个字符串的特定部分在C#
string a = "(something is there),xyz,(something there)";
和,我用这个
string s = "(something is there),xyz,(something there)";
int start = s.IndexOf("(") + 1;
int end = s.IndexOf(")", start);
string result = s.Substring(start, end - start);
,但我想用第二部分(something there)
我该怎么办它?
如果你想获得第二个“(”和“)”之间,然后如果你想获得后的字符串中使用这台开始索引搜索
start = s.IndexOf("(", end) + 1;
end = s.IndexOf(")", start);
string secondResult = s.Substring(start, end - start);
的IndexOf
第二个参数的文本最后)
使用此代码:
string otherPart = s.Substring(end+1);
您可以使用此:
string s = "(something is there),xyz,(something there)";
var start = s.Split(',')[2];
你也可以使用:
string s = "(something is there),xyz,(something there)";
Regex regex = new Regex(@"\([^()]*\)(?=[^()]*$)");
Match match = regex.Match("(something is there),xyz,(something there)");
var result = match.Value;
完全搞不清楚为什么有人会对此置之不理,看起来像是* specific *问题的最简单的解决方案作为OP介绍 – 2015-02-06 15:51:13
@MattBurland没问题,我不回答投票 – 2015-02-06 15:52:37
为什么字符串a =必填? – 2015-02-06 15:52:43
不知道到底是什么你解决这个做的,但是这确实是在这种特殊情况下:
var last = s.Split(',').Last(); // "(something there)"
或者更冗长的解释:
var s = "(something is there),xyz,(something there)";
var split = s.Split(','); // [ "(something is there)", "xyz", "(something there)" ]
var last = split.Last(); // "(something there)"
如果你不想要括号(英国)
var content = last.Trim('(', ')'); // "something there"
您可以使用下面的,如果你只是想要的文字:
var s = "(something is there),xyz,(something there)";
var splits = s.Split('(');
var text = splits[2].Trim(')');
如果 “最后”在这种情况下,您可以使用“第二个”String.LastIndexOf
:
string lastPart = null;
int lastStartIndex = a.LastIndexOf('(');
if (lastStartIndex >= 0)
{
int lastEndIndex = a.LastIndexOf(')');
if (lastEndIndex >= 0)
lastPart = a.Substring(++lastStartIndex, lastEndIndex - lastStartIndex);
}
这里是一个提取从字符串中的所有标记为List<string>
的解决方案:如果列表太小
string first = tokens[0];
string second = tokens.ElementAtOrDefault(1);
:
int startIndex = -1, endIndex = -1;
var tokens = new List<string>();
while (true)
{
startIndex = a.IndexOf('(', ++endIndex);
if (startIndex == -1) break;
endIndex = a.IndexOf(')', ++startIndex);
if (endIndex == -1) break;
tokens.Add(a.Substring(startIndex, endIndex - startIndex));
}
所以,现在你可以使用索引或Enumerable.ElementAtOrDefault
你会得到null
。如果你只是想最后使用tokens.Last()
。
可能比其他答案有点冗长? – MickyD 2015-02-06 16:20:10
@MickyDuncan:我提供了一个更详细的方法,可以提取所有部分。 – 2015-02-06 16:40:28
正则表达式会有所帮助。或者你可以使用'LastIndexOf',或者你可以使用'IndexOf'重载,它允许你指定搜索起始索引(使用最后一次搜索的索引+1)。或者你可以分开','并拿走最后一个元素。 – 2015-02-06 15:46:06
正则表达式有什么问题? '@“\([^()] * \)(?= [^()] * $)“' – 2015-02-06 15:46:16
你是否总是想要第二个'('作为开始还是你总是希望两者的内容? – Hogan 2015-02-06 15:48:26