2013-08-07 3 views
-3

개체의 텍스트 값을 가져 와서 Regex를 통해 정보를 얻고 그 출력을 메모장에 입력하려고합니다. 아래 코드는 내 코드이며, 객체 참조는 모두 정확합니다. 나는 정규식을 추출하려고하는 객체의 전체 텍스트를 포함하여 메모장에 다른 정보를 입력 할 수 있었으므로 Match.Groups [1] .Value에 문제가 있다고 가정하지만 보이지 않습니다. 그것을 알아 내기 위해. 이 정규식이 입력의 날짜 부분과 일치하지 않는 이유는 무엇입니까?

string pattern= @".*[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\s(A|P)M$"; 
string input = repo.ChangedByDate.Element.GetAttributeValueText("Text"); 

Match match = Regex.Match(input, pattern); 

string dateRegex = match.Groups[1].Value; 

Notepad.Textbox.PressKeys(dateRegex); 

는 편집 : 사과, 내가 너무 빨리 더 많은 관련 정보없이 기록했다.
Current date and time is: 8/7/2013 12:15:02 PM 

그래서 내가 추출 할 모든 pattern에 할당 된 정규식 8/7/2013 12:15:02 PM입니다 :

위의 코드는 원래의 텍스트 인 문자열의 날짜/시간 부분 일치하기위한 것입니다.

지금까지 출력이 메모장에 저장되지 않았습니다. 내가 코드를 변경했다 경우에는 바로 다음 : 메모장에서

string input = repo.ChangedByDate.Element.GetAttributeValueText("Text"); 

Notepad.Textbox.PressKeys(input); 

내 출력은 Current date and time is: 8/7/2013 12:15:02 PM

+3

우리는 독자를 신경 쓰지 않습니다. 'match.Groups [1] .Value'에 무엇이 들어 있는지 알려주십시오. 그리고 그 문제에 대한'입력 '. –

+0

오류가 어떻게 발생합니까? 질문이 뭐야? –

+0

정확한 문제 또는 질문은 무엇입니까? 디버거에서 값을보십시오. 그들은 유효합니까? 우리는 아마도 당신을 위해 이것을 디버그 할 수 없으며, 특히 입출력이없는 것은 아닙니다. –

답변

2

정규 표현식의 .*은 문자열의 시작과 일치합니다. 그것을 완전히 제외하고 그룹 0 (정규식과 일치하는 모든 컨텐츠)을 얻을 수 있습니다. 그룹에 액세스하기 전에 성공 여부를 확인해야합니다.

string pattern= @"[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\s[AP]M"; 

Match match = Regex.Match(input, pattern); 

if (match.Success) 
{ 
    string dateRegex = match.Groups[0].Value; 
    Notepad.Textbox.PressKeys(dateRegex); 
} 
+0

감사합니다. 이것이 정확히 맞는 해결책이었습니다. – Keith

2

Groups[0] 전체 경기 (당신의 정규식 주어진 가능성이 전체 문자열)를 포함한다.

Groups[1]이 당신이 제공해야 할거야 무엇을보고와 일치하지 않는 경우

(당신이 ()을 사용하기 때문에,이 경우 "A"또는 "P"에서) 첫 번째 그룹을 포함 더 자세한 내용은 입력 문자열이없고 더 중요한 것은 생성중인 Match 객체의 상태를 볼 수 없기 때문입니다.

2

이 당신을 위해 그것을 할 것입니다 : 당신이 전체 결과를 원하기 때문에 그 지금 Groups[1]에있을 것입니다, 그래서

.*([0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\s[AP]M)$ 

먼저, 그룹 전체 정규식이 필요했습니다. 둘째, 방금 Regex의 끝에 [AP]M이 필요했습니다.

여기에 Rubular to prove it입니다.

관련 문제