2012-04-24 2 views
6

C#에서 regex를 사용하여 용어를 검색하려고하는데이 용어의 복수형을 검색에 포함하고자합니다. 예를 들어 사용자가 'pipe'를 검색하려면 'pipes'에 대한 결과도 반환하고 싶습니다. 사용자가 '스트레스'를 입력하고 여전히 '파이프'에 대한 작업을 할 때 나는 나, 말, 일치 할 수 있도록 위의 수정 얼마나C#에서 정규 표현식을 사용하여 일치하는 복수식

그래서 나는이 작업을 수행 할 수 있습니다 ...

string s ="\\b" + term + "s*\\b"; 
if (Regex.IsMatch(bigtext, s) { /* do stuff */ } 

은 '강조'/'파이프'?

+1

Sergi - 나는 부끄러움 속에 내 머리를 매다.나는 나의 오래된 질문을 다시 살펴보고 그것을 분류 할 것이다! sch - 영어가 허락하는 이상한 일에 너무 귀찮게하지 말라. 나는 그 모든 것을 함정에 빠뜨리는 것이 아주 프로젝트라고 생각한다. – SAL

답변

1

다음은 복수형을 제거하기 위해 만든 정규식입니다 :

/(?<![aei])([ie][d])(?=[^a-zA-Z])|(?<=[ertkgwmnl])s(?=[^a-zA-Z])/g 

(Demo & source)

나는 그것이 정확하게 당신이 필요하지 알고, 그러나 당신이 뭔가를 찾는 데 도움이 될 수 있습니다.

+0

감사합니다 ThdK - http://gskinner.com/RegExr/은 정규 표현식을 테스트하는 훌륭한 방법입니다. – SAL

+0

난 그냥 최근에 들어 본 적이 없어요. 커뮤니티에서 만든 완벽한 정규식이 이미 많이 있습니다. 원하는 것이 아닌 경우 즉시 수정할 수 있습니다. – ThdK

+1

http : //www.english-zone과 함께 재미있게 즐기십시오. co.kr/spelling/plurals.html –

0

SQL 서버를 백엔드로 사용하는 경우 Soundex를 사용할 수 없습니까? 나는 당신이 무엇을 검색하려고하는지 확신 할 수 없다. 나는 당신이 검색 입력으로 동적 SQL을 만들려고한다고 가정합니다. 그렇지 않다면 SoundEx for LINQ가 있다고 생각합니다.

편집 : 나는 거기에 일부 linq에 SoundEx 할 수있는 SQL 엔터티 물건이 나타납니다.

그러나 MSDN에는 soundex 예제가 있습니다.이 예제에서는 오늘 아침에 실행 한 간단한 테스트로 테스트 한 것까지는 문제가없는 것 같습니다. http://msdn.microsoft.com/en-us/library/bb669073.aspx

는 I 만든 변화

여기

이 예이다 (이 문자열 워드) 나 확장 방법을 사용 .ToUpper 대신 내가 .ToUpperInvariant을 (사용 된 (불변)) 대신 전달 (현 워드)이었다 내가

List<string> animals = new List<string>(); 
animals.Add("dogs"); 
animals.Add("dog"); 
animals.Add("cat"); 
animals.Add("rabbits"); 
animals.Add("doggie"); 

string dog = "dog"; 
var data = from animal in animals 
where animal.SoundEx() == dog.SoundEx() 
select animal; 

데이터 실행 무엇 : 사용, 개, 개, SQL 서버와 이제 강아지

를 포함/자유 텍스트 /에 ContainsTable 등 및 카탈로그에 대해 SOUNDEX를 사용하여 (I는 네브라스카에 익숙하지 않다 SQL 서버의 버전 - 이전에 사용한 SQLServer 2000 구현으로 돌아가서) 결과를 순위 지정할 수도 있습니다.

당신은 당신이이 옵션을 조사 할 수 있습니다 SQL Server를 사용하는 능력이 또한 경우 : LINQ to SQL SOUNDEX - possible?

복수화 솔루션을 우려, 당신은 4

닷넷을 활용 할 수 있어야합니다을 또한 유용한 Levenshtein 거리 알고리즘이 있습니다.

+0

Stack Overflow에 오신 것을 환영합니다! 당신이 제안하고있는 기법의 실례의 형태로 당신의 답에 더 많은 내용을 제공하는 것은 어떻습니까? –

7

당신이 직면 할 수있는 문제는 man, fishindex과 같이 많은 수의 불규칙한 명사가 있다는 것입니다. 따라서 Pluralize 방법을 사용하는 PluralizationService을 사용해보십시오. Here은 사용법을 보여주는 예입니다.

용어의 복수형을 얻은 후에는 복수형 또는 단수형 모두를 검색하는 정규식을 쉽게 만들 수 있습니다.

PluralizationService ps = PluralizationService.CreateService(CultureInfo.CurrentCulture); 
string plural = ps.Pluralize(term); 
string s = @"("+term+"|"+plural+")"; 
if (Regex.IsMatch(bigtext, s)) { 
    /* do stuff */ 
} 
+0

이것은 특히 다른 문화를 다룰 때 매우 중요합니다! 나는 catchall 정규식이 있다고 생각하지 않는다. –