首页 > 解决方案 > Lambda 表达式:从较大的字符串中挑选出一个子字符串

问题描述

这是我试图处理的字符串

var str = 
  "$filter=HRRepName ne null and HRRepName ne '' and HRRepName eq 'jessica.l.hessling'&$top=1"

目前使用下面的代码来获取子字符串- jessica.l.hessling

var repName = odataQuery
  .Split(new string[] { "eq" }, StringSplitOptions.RemoveEmptyEntries)[1]
  .Split(new char[] { (char)39 })[1]
  .Replace("'", "")
  .Trim();

但是这个索引可能会在以后产生错误,因此我想使用 lambda 表达式。

我到目前为止所尝试的:

var repName2 = odataQuery
 .Split(new string[] { "HRRepName" }, StringSplitOptions.RemoveEmptyEntries)
 .Select(s.Substring(s.IndexOf("eq",StringComparison.Ordinal)+1));

标签: c#.netregexlinq

解决方案


好吧,我认为 Regex 在这里可能是一个很好的选择,试试下面的代码:

var str = "$filter=HRRepName ne null and HRRepName ne '' and HRRepName eq 'jessica.l.hessling'&$top=1";
var match = (new Regex(@"HRRepName eq '([^']+)")).Match(str);
var extractedString = match.Success ? match.Groups[1] : null;

说明:HRRepName eq '([^']+)将按HRRepName eq '字面意思匹配,然后将匹配所有内容,直到'字符带有([^']+),括号表示它将存储在捕获组中。


推荐阅读