2013-02-20 2 views
-1

나는 다음과 같은 코드가 있습니다일치하는 문자열을 Regex에서 가져 오는 방법은 무엇입니까? [C#을]

private void button_borrow_Click(object sender, EventArgs e) 
    { 
     Regex filter = new Regex(@"[0-9]*"); 
     String items = ""; 
     var selectedItems = checkedListBox_bookview.CheckedItems; 
     foreach (var item in selectedItems) 
     { 

     } 
     MessageBox.Show(items.ToString() + " Were selected: " + selectedItems.Count); 
    } 

내가 filter에서 일치하는 문자열 싶어합니다. 어떻게해야합니까?

+1

:

여기에 쉽게 시나리오를 지원하도록 수정 될 수있는 작은 예, 있어요? –

+0

나는 그렇다. 방금 복사하는 것을 잊었습니다. 상관 없어요. – Billie

+1

어떻게 상관 없나요? 최신 답이 보여 주듯이 결과를 확인하는 데는 한 가지 이상의 방법이 있습니다 (실제로 나는 당신이 원하지 않는 방법이라고 생각합니다). 그러나 그 외에도, 당신이 무엇을하고 있는지를 모르는 경우, 정의 상으로는 그것이 중요하지 않다는 것을 어떻게 알 수 있습니까? 무의미한 말. –

답변

2

Regex.IsMatch 메서드를 사용하여 정규식이 입력 문자열에서 일치하는지 확인하십시오. 예컨대

foreach (var item in selectedItems) 
    { 
     if (filter.IsMatch(item.ToString()) 
      // matched 
    } 

은 BTW는 입력 문자열에있을 어떤 번호를 필요로하지 않기 때문에 [0-9]*는 아무 것도 일치 있음을 유의하십시오. 아마도 당신은 ^\d+$

업데이트가 필요합니다 얻기 일치하는 번호 :

Regex filter = new Regex(@"(\d+)"); 

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var match = filter.Match(item.ToString()); 
    if (match.Success) 
    { 
     MessageBox.Show(match.Value); 
    }  
} 
+0

일치하는 문자열을 얻으려면 어떻게해야합니까? 제 말은 "xxaajj8589jfa"입니다. 나는 단지 8589를 원한다. – Billie

0

모든 당신이 .Matches을 (사용) 및 반환 수집을 반복 할 필요가 일치 찾을 수 있습니다.

또 다른 좋은 방법은 정규 표현식을 컴파일하여 실행될 때마다 실적에 영향을주지 않아서 클래스의 정적 필드에 할당하고 "RegexOptions.Compiled"를 사용하는 것입니다. 당신은 실제로 _use_ 필터, 그래서 무슨 일이 발생하지

class Program { 
    private static Regex _filterRegex = new Regex(@"[0-9]+", RegexOptions.Compiled); 

    static void Main(string[] args) { 
     foreach (Match match in _filterRegex.Matches("1,2,3,4,5,6")) { 
     Console.WriteLine("Match: " + match.Value); 
     } 
    } 
    } 
관련 문제