从不带正则表达式的字符串中提取最后一对括号之间的文本
本文关键字:文本 之间 最后 提取 正则表达式 字符串 | 更新日期: 2023-09-27 18:35:58
>我有一个字符串列表,其中有一个项目,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;
问题:这始终从第一对括号中选取文本,在本例中为用户。
阅读了很多类似问题的答案,我意识到在这种情况下可能不推荐正则表达式(尝试其他代码也不是特别成功)。但是,任何可以完成任务的简短例程的帮助将不胜感激。
您需要使用 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);
实际上,您需要验证start
和end
以确保找到两个括号。 如果未找到该字符,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) : "";
您可以使用 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;
另一种方法是将 while 循环与 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
....