在 C# 中,解析某些字符中的单词的推荐方法是什么?

In C#, what is the recommended way to parse out a word inside certain characters?

在 C# 中,我收到一个字符串,我正在读入一个看起来像这样的变量

var fullString = "Some random text (importantword)"

解析 "importantword" 的最简单方法是什么?正则表达式?只为“(”和“)”字符做 .IndexOf()?

您可以使用捕获组或环视来获取 () 括号之间的所有字符。

String input = @"Some random text (importantword)";

Regex rgx = new Regex(@"(?<=\()[^()]*(?=\))");

foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Groups[0].Value);

String input = @"Some random text (importantword)";

Regex rgx = new Regex(@"\(([^()]*)\)");

foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Groups[1].Value);

IndexOf绝对是最简单的。

https://msdn.microsoft.com/en-us/library/aa287734%28v=vs.71%29.aspx

后跟一个子字符串。

var startIndex = fullString.IndexOf("(") + 1;
var endIndex = fullString.IndexOf(")");
var targetWord = fullString.Substring(startIndex, endIndex - startIndex);

编辑:正如下面的评论所指出的,我忘记了 startIndex 是用于左括号而不是实际单词。

正则表达式有两个缺点:它们可能比 IndexOf() 慢,而且它们通常不容易阅读和理解。在您的情况下,查找括号中的文本很容易,不需要正则表达式。

如果您的字符串总是以 ) 结尾,那么您可以只搜索 ( 并删除最后一个字符:

var start = fullString.IndexOf('(') + 1;
var end = fullString.Length - 1;
return fullString.Substring(start, end - start);

否则,进行两个搜索。在最后一种情况下,请记住使用 IndexOf(char, int) 重载来避免搜索整个字符串:

var start = fullString.IndexOf('(') + 1;
var end = fullString.IndexOf(')', start); // Notice the `start`
return fullString.Substring(start, end - start);