1

我有一个字符串列表,其中有一个项目,textItem1 = "Brown, Adam. (user)(admin)(Sales)"我总是必须从最后一对括号中提取文本,在这种情况下是Sales

我尝试了以下方法:

string name = DDlistName.SelectedItem.ToString();
int start = name.IndexOf("(");
int end = name.IndexOf("(");
string result = name.Substring(start + 1, end - start - 1);
_UILabelPrintName.Text = result;

问题:这总是从第一对括号中选择文本,在这种情况下是user

阅读大量类似问题的答案后,我意识到在这种情况下可能不推荐使用正则表达式(尝试其他代码也没有特别成功)。然而,任何可以完成任务的简短例程的帮助将不胜感激。

4

2 回答 2

2

您需要使用LastIndexOf而不是IndexOf,并检查最后是否有右括号。

string name = "Brown, Adam. (user)(admin)(Sales)";
int start = name.LastIndexOf("(");
int end = name.LastIndexOf(")");
string result = name.Substring(start + 1, end - start - 1);

确实,您需要验证startend确保找到两个括号。 如果找不到字符则LastIndexOf返回。-1

为了处理嵌套,我们需要在左括号的位置之后向前搜索右括号。

 string name = "Brown, Adam. (user)(admin)((Sales))";
 int start = name.LastIndexOf('(');
 int end = (start >= 0) ? name.IndexOf(')', start) : -1;
 string result = (end >= 0) ? name.Substring(start + 1, end - start - 1) : "";
于 2013-10-17T13:06:57.390 回答
1

您可以使用 split 函数,在左括号处断开字符串。最后一个数组元素是带有尾部“)”的所需输出,然后将被删除。

var input = "Brown, Adam. (user)(admin)(Sales)";
// var input = DDlistName.SelectedItem.ToString();

var lastPick = input.Split(new[] { "(" }, StringSplitOptions.RemoveEmptyEntries).Last(); 
var output = lastPick.Substring(0, lastPick.Length - 1);

_UILabelPrintName.Text = output;

另一种方法是使用带有IndexOf. 只要找到另一个“(”,它就会剪切输入字符串。如果没有找到更多的“(”,它将获取剩余字符串的内容,直到右括号“)”:

int current = -1;
while(name.IndexOf("(") > 0)
{
    name = name.Substring(name.IndexOf("(") + 1);
}

var end = name.IndexOf(")");
var output = name.Substring(0, end);

_UILabelPrintName.Text = output;

或者使用LastIndexOf....

于 2013-10-17T13:06:37.940 回答