2013-03-26 4 views
0

이것이 가능합니까? 이 문자열에서두 문자 사이의 일치

는 :

string = "lsdfh892pr23hr4342pr3j4r\n\nwww.foobar.com•\nyahoogooglebing" 

나는 "www.foobar.com"을 추출 할.

그리고, 일이에서 :

string = "lsdfh892pr23hr4342pr3j4r\n\[email protected]•\nyahoogooglebing" 

나는 "[email protected]"을 추출 할.

+0

무엇을 추출 할 수 있습니까? 도메인 패턴과 일치하는 문자열 또는 새 줄 사이의 문자열? – Gael

+0

문자열 사이에 \ n \ n 및 • ... – sambehera

답변

5

나는 루비 구문을 잘 모르겠지만,이 정규식 작동합니다 :

/\n\n([^•]*)•/ 
+0

시도해 주셔서 감사합니다! – sambehera

+1

그럴거야. 루비에서는'email = string [/ \ n \ n (. +?)? /, 1]'또는 간단히'email = string [ , 1]' – Phrogz

+0

@Phrogz 정규 표현식 뒤에/m 플래그를 추가했는데 완벽하게 작동했습니다! 대답 해 줄 수 있니? 나는 그것을 받아 들일 것이다! – sambehera

1

나는 정규 표현식 신경 쓰지 것 :

string = "lsdfh892pr23hr4342pr3j4r\n\nwww.foobar.com•\nyahoogooglebing" 
string.split("\n")[2][0..-2] 
=> "www.foobar.com" 

string = "lsdfh892pr23hr4342pr3j4r\n\[email protected]•\nyahoogooglebing" 
string.split("\n")[2][0..-2] 
=> "[email protected]" 
+1

split은 단순한 종류의 정규식이며, 여기서는 코드를 단순화하지 않고 추출의 유연성을 떨어 뜨립니다 (전자 메일 또는 도메인이 매번 세 번째 줄에 있는지 잘 모름). 성능은 향상되지 않습니다 . – Gael

+0

예,'split'은 문자열''\ n "'을 정규 표현식으로 강제 변환하지만,보다 복잡한 패턴을 유지할 필요가있는 연산을 덜어줍니다. 문자열에 항상 세 번째 줄에 사이트 이름이 있는지 여부는 OP에게 달려 있습니다. 이 경우 주어진 데이터 샘플과 일치하며, 항상 "총알"또는 두 개의 "\ n"이 있다고 가정하는 것처럼 가정하는 것이 안전합니다. –

+0

좋아요, 정규 표현식은 유지 관리가 복잡 할 수 있습니다. 그러나 나는 좋은 의미의 코드를 선호한다고 생각한다. 그리고 '분할'은 특별히 내용을 추출하지 않습니다. – Gael

관련 문제