2014-12-25 2 views
0

문자열 'MT/23232'를 추출해야합니다. 아래 코드를 작성했지만 작동하지 않습니다. 아무도 여기에서 도와 줄 수 있습니까?정규 표현식을 사용하여 문자열 추출

'Policy created with MT/1212' 
'Policy created with MT/121212' 
'Policy created with MT/21212121212' 

이 코드를 작성했습니다

MSG = "MT/33235" ID는 (/ MT/\ D +/\ D + /는) [0]

하지만 msg.scan 아니다 = 어느 날이 문자열을 추출하는 데 도움이 될 수 있습니까?

답변

1

정규 표현식에서 MT 옆에있는 슬래시를 이스케이프해야하고 \d+ 뒤에 슬래시가 필요하지 않습니다. 그리고 나는 또한 당신이 깨끗한 결과를 얻을 수 있도록 lookbehind를 추가 할 것을 제안합니다. (?<=\s) 앞에 일치하는 공백 문자가 있어야한다는 것을 나타내는 긍정적 인 lookbehind입니다.

msg.scan(/(?<=\s)MT\/\d+/)[0] 

위의 문자를 신경 쓰지 않는다면 아래의 정규 표현이 좋을 것입니다.

msg.scan(/MT\/\d+/)[0] 

예 :

> msg = 'Policy created with MT/21212121212' 
=> "Policy created with MT/21212121212" 
> msg.scan(/(?<=\s)MT\/\d+/)[0] 
=> "MT/21212121212" 
> msg.match(/(?<=\s)MT\/\d+/)[0] 
=> "MT/21212121212" 
+0

안녕하세요 Avinash, 감사합니다. 그렇지만 스캔을 사용하는 이유는 무엇입니까? STring # []을 사용했을 수 있습니다. 맞습니까? – RAJ

+0

하나의 일치를 수행하려면'match' 함수로 충분할 것입니다. –

+0

네,하지만 제가 말하고자하는 것은, msg [/ MT \/\ d + /]와 같은 코드를 스캔 할 수 있다는 것입니다. 항상 첫 번째 값을 반환하기 때문입니다. – RAJ

1
your_string.scan(/\sMT.*$/).last.strip 

하여 원하는 문자열은 문자열, 어디에서나있을 수있는 경우 :

your_string.scan(/\bMT\/\d+\b/).last.strip # "\b" is for word boundaries 

아니면 허용 숫자 이런 식으로 지정할 수 있습니다,

your_string.scan(/\bMT\/[0-9]+\b/).last.strip 

마지막을 문자열 형식 경우 지정한대로 유지됩니다.

your_string.split.last 
+0

하이 Humza, 매우 의미가 있습니다 감사합니다. – RAJ

+0

질문에 대한 답변을 선택한 경우 답변을 선택으로 표시하십시오. – Humza

+0

나는 당신이 말하는 것을 이해하지 못합니다. 클릭해야하는 'selected'라는 버튼이 있습니까? – RAJ

관련 문제