如何在c#中获取字符串的特定部分

时间:2015-02-06 15:43:54

标签: c# string

我有一个字符串

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) 我怎么能这样做?

6 个答案:

答案 0 :(得分:5)

不确定你到底在做什么,但是在这种特殊情况下会这样做:

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)"

如果你不想要括号(en-GB)

var content = last.Trim('(', ')'); // "something there"

答案 1 :(得分:3)

您可以使用:

  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;

答案 2 :(得分:3)

a.Split("(),".ToCharArray(),StringSplitOptions.RemoveEmptyEntries);

这将返回一个包含3个字符串的数组:something is therexyzsomething there

答案 3 :(得分:3)

如果“last”与“second”相同,则可以使用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>

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

string first = tokens[0];
string second = tokens.ElementAtOrDefault(1);

如果列表太小,则会得到null。如果您只想上次使用tokens.Last()

答案 4 :(得分:2)

如果您只想要文字,可以使用以下内容:

var s = "(something is there),xyz,(something there)";
var splits = s.Split('(');
var text = splits[2].Trim(')');

答案 5 :(得分:0)

如果你想在第二个'('和')'之间得到文本,那么使用IndexOf的第二个参数来设置搜索的起始索引

start = s.IndexOf("(", end) + 1;
end = s.IndexOf(")", start);
string secondResult = s.Substring(start, end - start);

如果您想在最后)之后获取该字符串,请使用此代码:

string otherPart = s.Substring(end+1);