2010-12-23 2 views
3

패턴 도움말 : 숫자는 다를 수정규식 나는 다음과 같은 가능한 스트링해야합니다

12_3

또는

12_3 + 14_1 + 16_3-400_2

,하지만 난 어떤 찾고있는 것은 X_X 숫자 패턴입니다. 그러나 2_3을 검색하고 12_3을 유효한 일치로 반환하지 않는 바꾸기를 수행해야합니다.

+/-는 예술적 심볼이며 유효한 값일 수 있습니다. 또한 ARENT는 (첫 번째 예제에서) 필요합니다. 그래서, 12_3 인 문자열을 검사하고 싶습니다. 2_3을 전달하면 일치를 반환하지 않습니다. 12_3에 합격 한 경우에만.

이것은 C# 스크립트 용입니다.

도움을 주셔서 감사합니다. 나는 바보 야.

+2

나는 당신이 당신을 위해 당신의 일을 할 것을 요구하는 것 이상의 과다한 "질문"을 이해하지 못합니다.Regular Budget와 같은 소프트웨어 또는 Mastering Regular Expressions와 같은 훌륭한 책을 읽으면 Regular Expressions를 배울 수있는 많은 방법이 있습니다. 어느 쪽이든 정규 표현식 질문에 대한 변명의 여지가 없으므로 먼저 시도한 표현을 표시하지 않아도됩니다. –

+0

@Frazell -이 사용자가 다섯 번째 질문이며 첫 번째 정규식 질문입니다. 일반적인 문제가 있다고 생각되는 경우 [meta] (http://meta.stackoverflow.com/)에 질문을 시작하십시오. 그러나 기본적으로 여기서는 잡음입니다. – Kobi

답변

2

좋아, 우리가 가지고 즉 : 2_3 + 12_3 + 14_1 + 16_3-400_2 + 2_3

정규식 # 1 :

Regex r1 = new Regex(@"\d+(\d_\d)"); 
MatchCollection mc = r1.Matches(sourcestring); 

매치 실측치 :

[0] [0 = 12_3 [0] [1] = 2_3

는 [1] [0] = 14_1 [1] [1] =

4_1

,617

: 451,515,

[2] [0] = 16_3 [2] [1] 6_3

[3] [0] = 400_2 [3] [1] 0_2

정규 표현식 # 2 =를 = 실측치

Regex r2 = new Regex(@"\d+\d_\d"); 
MatchCollection mc = r2.Matches(sourcestring); 

일치 :

[0] [0] = 12_3

[1] [0] = 14_1

,

[2] [0] = 16_3

[3] [0] = 400_2

당신이 찾고 있던 무슨 것을 여기인가?

+0

감사합니다. 당신의 두 번째 패턴과 비슷한 패턴을 가지고 있었지만 _ 왼쪽과 오른쪽에있는 숫자를 기반으로 여러 패턴을해야 할 필요가 없다면 그럴 수 없었습니다. 매우 도움이되었습니다! – dpluscc

2

\b\d+_\d+\b.

\d은 숫자이며, \b은 제로 단어 경계입니다. 이 부분은 C# regex cheat sheet입니다.

업데이트 : \b이 단어 경계 (grep의 \<\>)인지 확인하기 위해 "C# regex 치트 시트"를 찾았습니다. 그것은 첫 번째 결과였습니다. 나는 실제로 텍스트를 확인하지 않았다. 어쨌든, 이제 다른 치트 시트에 연결됩니다.

+0

See, 내가 원하는 번호를 알고있다. 예를 들어, 내 문자열에서 2_3을 찾을 것입니다. 그래서 패턴 \ b2_3을 사용하면 오른쪽에서 "2_3"을 찾습니다. 문자열 12_3 + 2_3 + 122_3 .. 나는 왜, 비록 정말로 이해하지 않는다?! :) – dpluscc

+0

"단어 문자 사이의 위치에서 일치합니다."나는 단어로 12_3을, 그리고 구분 기호로 +를 추측하고 있습니다. – dpluscc

+2

치트 시트에 신경 쓰지 마십시오. '\ b'는 단어 문자가 뒤 따르고 위치가 하나 (단어 시작)가 아니거나 단어 문자 앞에오고 뒤에 하나 (단어 끝)가없는 위치와 일치합니다. 다른 문자 (있는 경우)는 공백, 구두점 또는 "단어 문자"가 아닌 문자 (즉, 문자 또는 숫자 또는 밑줄과 같은 구두점 연결) 일 수 있습니다. '\ b2_3'는'\ b'가 2 개의 단어 문자 '1'과'2' 사이에서 매치해야하기 때문에'12_3'과 일치하지 않습니다. –