我有一个类似下面的字符串,我想用函数的输出替换 FieldNN 实例。
到目前为止,我已经能够用函数的输出替换 NN 实例。但我不确定如何使用相同的正则表达式删除静态“字段”部分。
输入字符串:
(Field30="2010002257") and Field1="yuan" not Field28="AAA"
所需输出:
(IncidentId="2010002257") and Author="yuan" not Recipient="AAA"
这是我到目前为止的代码:
public string translateSearchTerm(string searchTerm) {
string result = "";
result = Regex.Replace(searchTerm.ToLower(), @"(?<=field).*?(?=\=)", delegate(Match Match) {
string fieldId = Match.ToString();
return String.Format("_{0}", getFieldName(Convert.ToInt64(fieldId)));
});
log.Info(String.Format("result={0}", result));
return result;
}
这使:
(field_IncidentId="2010002257") and field_Author="yuan" not field_Recipient="aaa"
我想解决的问题是:
- 从输出中删除静态“字段”前缀。
- 使“FieldNN”部分的正则表达式不区分大小写,而不是小写引用的文本部分。
- 使正则表达式更健壮,以便引用的字符串部分使用双引号或单引号。
- 使正则表达式更健壮,以便忽略空格:FieldNN = "AAA" vs. FieldNN="AAA"
我真的只需要解决第一个问题,其他三个将是一个奖励,但一旦我发现了正确的空格和引号模式,我可能会解决这些问题。
更新
我认为下面的模式解决了问题 2. 和 4。
result = Regex.Replace(searchTerm, @"(?<=\b(?i:field)).*?(?=\s*\=)", delegate(Match Match)