아래 문자열을 가지고 있는데 FieldNN 인스턴스를 함수의 출력으로 바꾸고 싶습니다.정규식을 함수로 바꾸고 다른 일치 항목을 삭제하십시오.
지금까지 NN 인스턴스를 함수의 출력으로 바꿀 수있었습니다. 하지만 같은 정규 표현식으로 정적 "필드"부분을 어떻게 삭제할 수 있는지 잘 모르겠습니다.
입력 문자열 :
(Field30="2010002257") and Field1="yuan" not Field28="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"
,536
(IncidentId="2010002257") and Author="yuan" not Recipient="AAA"
이 코드는 내가 지금까지 가지고있다 내가 해결하고 싶은개
이슈는 다음과 같습니다
- 출력에서 정적 "필드"접두사를 제거합니다.
- "FieldNN"부분에서 대소 문자를 구별하지 말고 인용 된 텍스트 부분은 소문자로 만드십시오.
- 정규식을보다 견고하게 만들어 인용 문자열 부분에 큰 따옴표 나 작은 따옴표를 사용하도록합니다. FieldNN = "AAA"를 FieldNN = "AAA"
, 다른 세 보너스가 될 것이지만, 대 : 공백이 무시되도록
업데이트
나는 아래의 패턴 대신에 긍정적 인 lookbehind의 첫 번째 문제의 사용 그룹 해결하려면 문제 2.와
result = Regex.Replace(searchTerm, @"(?<=\b(?i:field)).*?(?=\s*\=)", delegate(Match Match)
두 번째 및 세 번째 문제를 완전히 이해하지 못했습니다. 2) 지금은 정규식에서 대소 문자를 구분하지 않습니다. 3) 값 부분을 변경하지 않고 정규 표현식에 포함해야하는 이유는 무엇입니까? –
@ Yevgeniy.Chernobrivets 2) 예. 대소 문자를 구별하지 않지만 인용 된 문자열도 소문자로 처리합니다. 3) 가치 부분을 변경하지 않지만 값부에있는 FieldNN과 일치 할 것이라고 걱정했습니다 (표현이 너무 욕심스러운 경우) – hairyone