从此字符串中提取用户名?
<title>[FirstName] [SecondName] (@[Username]) on [Site]</title>
我尝试使用正则表达式,但它给了我:
找不到对象引用异常。
这是我使用的代码:
return Regex.Matches(title, @"\(([^)]*)\)").OfType<Match>().LastOrDefault().ToString();
答案 0 :(得分:1)
请尝试以下操作:
string input = "<title>[FirstName] [SecondName] (@[Username]) on [Site]</title>";
string pattern = @"\[(?'value'[^\]]+)\]";
MatchCollection matches = Regex.Matches(input, pattern);
Console.WriteLine("User Name : '{0}'", matches[2].Groups["value"].Value);
Console.ReadLine();
答案 1 :(得分:1)
如果您要从Username
中提取<title>[FirstName] [SecondName] (@[Username]) on [Site]</title>
,可以使用匹配的否定character class在组中捕获(@[
和])
之间的内容不是关闭方括号一次或多次[^]+
:
或者使用肯定的lookbehind断言左边的内容是(@[
,并且肯定右边的内容是])
的正向前瞻:
答案 2 :(得分:0)
我刚刚测试了代码here并且它有效:
var match = Regex.Matches("<title>[FirstName] [SecondName] (@[Username]) on [Site]</title>", @"\(([^)]*)\)")
.OfType<Match>()
.LastOrDefault()
.ToString();
与您的代码唯一不同的是我没有使用title
变量。因此,title
变量可能是null
,或者为空或不包含任何匹配项,因此您可能会因为LastOrDefault().ToString();
失败而导致ToString()
失败,因为您正在调用{{1} null
引用时LastOrDefault
返回null
,当您处理空的引用类型集合时)。
要修复错误,只需重构您的代码,如下所示:
var match = Regex.Matches("<title>[FirstName] [SecondName] (@[Username]) on [Site]</title>", @"\(([^)]*)\)")
.OfType<Match>()?
.LastOrDefault()?
.ToString();
仅当结果不是?
时才会调用null
字符后面的代码。