2012-12-08 3 views
1

URL에 연결하기위한 초기 "The"및 공백을 제거합니다. 나는 이것을 가지고 있지만 추악하고 하나의 표현으로 통합하고 싶습니다.이 표현식을 어떻게 통합 할 수 있습니까?

@artist.sub!(/[Tt]he/, '') 
@artist.gsub!(/\s+/, '') 
+0

왜 하나의 정규식에 있어야합니까? 이는 유지하기가 더 복잡한 패턴 만 생성합니다. –

답변

3

시도 :

@artist.gsub!(/(\A[Tt]he)|(\s+)/, '') 
+0

표현의 중간에 "the"를 제거합니다. –

+0

@EricWalker : 맞습니다.하지만 시작과 시작만으로 통합하고 수행 할 방법이 없습니다. – Linuxios

+0

@EricWalker : 수정 됨. – Linuxios

3

할 수 있습니다 물론 체인 #sub#gsub 표현; 예를 들어,

@artist = @artist.sub(/^[Tt]he/, '').gsub(/\s+/, '') 

더 이상의 컴팩트하고 내가 전화를 주저 것 우아한 — 단지 영리 (불분명).

#sub!#gsub! 대신 #sub#gsub을 사용합니다. @ pguardiario의 설명에 따르면 두 번째 두 문은 일치가 없으면 nil을 반환하므로 NoMethodError 예외가 발생합니다. 또한 "The"가 문자열의 가운데에서 제거되는 것을 막기위한 앵커가 있습니다.

URL에 사용하기 위해 슬러그를 만들려는 경우 라이브러리에있는 메소드를 사용하는 것이 좋습니다.

+1

+1. OP가 space-runs을 단일 공백으로 바꾸는 경우, 나는'\ s'을 사용하지 않고 대신'' ''을 사용하거나''squeeze ("')를 사용하여 전환합니다. –

+1

조심성이 없으면'sub!'는 nil을 반환합니다. 또한 경계를 포함 시키면 문제가 생길 수 있습니다. – pguardiario

+0

@pguardiario : 훌륭한 관찰. –

1

내가 함께 갈 것 :

@artist = @artist.sub(/\Athe\b/i, '').strip 
+0

공백을 없애기 위해 뭔가가 필요합니다 (OP 질문의 두 번째 줄). –

+0

@Eric Walker -'strip'은 초기 공백을 제거합니다. – pguardiario

+0

맞거나 틀리게, 그는 중간에도 공백을 넣을 것입니다. –

관련 문제