这是我要处理的字符串
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));
答案 0 :(得分:1)
好吧,我认为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 '
,然后它将匹配所有内容,直到'
字符与([^']+)
,方括号表示将其存储在捕获组中。
答案 1 :(得分:0)
您写道:
这可以是任何名称,我希望字符串在eq之后但在'&'之前
要查找项目是否在字符串中,和/或根据某种模式从字符串中提取子字符串,通常使用RegEx。
要在第一个eq之后,第一个&之前和此eq之后获取数据:
const string regexPattern = ".*eq(.*)&";
var match = RegEx.Match(regexPattern);
if (match.Success)
{ // found the pattern, it is in Match.Groups
ProcessMatch(match.Groups[1]); // [0] is complete matching string, [1] is first capture
}
模式:
*.
以零个或多个字符开头的字符串eq
直到出现eq (*.)
捕获零个或多个字符&
直到此等式的第一个&之后您可以使用online RegEx pattern testers
之一对此进行测试捕获的项目在Match.Groups中。我还没有测试过,但据我所记得,这是一个IList,其中元素[0]是完整的匹配字符串,1是第一个捕获的项目。调试器将向您显示此内容。