2014-01-16 3 views
3
foreach (Match match in Regex.Matches(line, "X")) 
{ 
     indexes.Add(match.Index); 
} 

빠른 질문이 있습니다. 다음은 코드의 일부입니다. X의 인덱스를 가져 오지만 X가 소문자 인 경우에도 인덱스를 가져 오려고합니다. 나는 무엇을 써야 하는가?Regex.Matches 대문자와 소문자가 일치합니다.

+2

''[Xx] ''를 써야합니다. 이것은 모든 정규 표현식 튜토리얼에 의해 다루어지며, 정규 표현식을 사용하려고한다면 SO를 묻기 전에 IMHO가 합당한 단계 중 하나를 읽는다. – Jon

+0

한 문자 만 찾고 있다면 Regex를 사용하는 것은 무거운 짐입니다. – Sean

답변

4

사용 i 모드 수정 (정규 표현식 대소 문자를 구분하기) :

foreach (Match match in Regex.Matches(line, "(?i)X")) 

또는 RegexOptions.IgnoreCase 옵션을 사용

foreach (Match match in Regex.Matches(line, "X", RegexOptions.IgnoreCase)) 

를 지정하거나 모두 Xx :

foreach (Match match in Regex.Matches(line, "[Xx]")) 
3

정규식을 사용하지 않고 그냥 Regex.Matches(line.ToLower(), 'x') 할 수 있습니다.

+0

솔루션이지만 Regex 일치가 이제는 ToLower와 O (2n) 연산이므로 솔루션이 상당히 비효율적입니다. –

+0

정규식은 O (n)과 일치하지 않습니다 (정직한 질문, 단서가 없습니다)? 그런데 여기서는 성능을 고려하지 않았습니다. –

+0

Regex는 정의상 O (n) 연산이 아니지만 표현 자체에 크게 의존합니다. –

관련 문제