我的主要字符串是
“自1500年代20 TN 123 34起,Lorem Ipsum一直是业界标准的伪文本”
我只想从Main String获取“ 123 34”。 我已经完成了以下代码。
string mainStr = " Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 20 TN 123 34";
string filterStr = mainStr.Substring(0, mainStr.LastIndexOf(" "));
int sRange = filterStr.LastIndexOf(" ");
string outputStr = mainStr.Substring(sRange+1);
如何用Linq方法完成(只需一行就可以了)?
答案 0 :(得分:4)
使用linq来获取最后两个元素可能有点难以理解,因此我建议不要使用LastIndexOf
或Substring
的多行解决方案:
string mainStr = " Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 20 TN 123 34";
var words = mainStr.Split();
var lastTwoWords = string.Join(" ", words.Skip(words.Length - 2));
如果您确实需要它成为linq,则可以使用Reverse
和Take
的组合:
var lastTwoWords = string.Join(" ", mainStr.Split().Reverse().Take(2).Reverse());
答案 1 :(得分:1)
使用Linq:
string mainStr = " Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 20 TN 123 34";
var reverse = mainStr.Split(' ').Reverse();
string output = reverse.Take(1).Last() + " " + reverse.Take(2).Last();
您可以使用LastOrDefault()
更好的表现:
int x1 = mainStr.Trim().IndexOf(" ");
int x2 = mainStr.Trim().LastIndexOf(" ");
int x3 = mainStr.Trim().LastIndexOf(" ", x2-1);
string firstWord = mainStr.Trim().Substring(0, x1);
string middleWord = mainStr.Trim().Substring(x1, x2 - x1);
string lastWord = mainStr.Trim().Substring(x2 + 1);
string output = mainStr.Trim().Substring(x3 + 1); // returns 123 34
答案 2 :(得分:1)
我会将您已经拥有的内容转移到一个单独的方法中(并整理一下):
public static string GetLast2Words(string mainStr)
{
int position = mainStr.LastIndexOf(' ', mainStr.LastIndexOf(' ') - 1);
return position >= 0 ? mainStr.Substring(position) : null;
}
用法:
var outputStr = GetLast2Words(mainStr);
或者,您可以使用正则表达式:
var outputStr = Regex.Match(mainStr, "\\s(\\S+\\s\\S+$)").Groups[0].Value;
\s
匹配空格\S
与任何非空格字符匹配请注意,如果没有匹配项,则正则表达式方法将输出string.Empty
,而第一个方法将输出null。
答案 3 :(得分:0)
使用Linq
如果您真的想在Linq中进行操作,则可以执行以下操作。
var list = mainStr.Split(new []{" "},StringSplitOptions.RemoveEmptyEntries).Reverse().Take(2).Reverse();
但是请注意,由于有两个Reverse语句,因此不建议这样做。
使用RegEx
更好的选择是使用正则表达式
var result = Regex.Match(mainStr,@"(\w*)\s(\w*)*$").Value;
输出
123 34
答案 4 :(得分:-1)
如果您可以获取字符串的长度,这可能是解决方案。
string mainStr = " Lorem Ipsum has been the industry's standard dummy text ever since the 1500s 20 TN 123 34";
string filterStr = String.Concat(mainStr.Skip(mainStr.Count() - 6));
Console.WriteLine(filterStr);