在 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);
在 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);