2012-04-01 2 views
4

감사합니다 ...정규식/루비에서 문자열에서 미리

내가 루비에서 정규 표현식 몇 가지 문제가, 또는 다른 문자열에서 슬래시를 제거 할 수있는 방법을 찾는 오전 슬래시를 제거합니다. 내 문자열의 모양은 다음과 같습니다.

string = "word \/ word" 

백 슬래시와 슬래시를 모두 제거하려고합니다.

string = "word word" 

내가 이스케이프 문자로 뭔가를 놓치고 생각, 또는 누가 무엇을 알고 :이 결과를 원한다!

나는이 시도했다 : 백 슬래시를 제거 할 수 있지만 슬래시 잎합니다

string.gsub(/\//, "") 

. 나는 도처에 이스케이프 문자가있는 변형을 시도해 보았습니다.

저는 정규식에 끔찍하고 일반적으로 문자열 작업에 매우 좌절감을 느낍니다. 나는 그것이 명백한 무엇인가 확실하다. 그러나 나는 무엇이 없는가?

+0

'string.gsub (/ \/| \\ /, "") '모두 슬래시를 제거하지만, 니클라스 B가 지적한대로, 당신은 더 나은 대체 문자열을 사용하는 . – Alan

+0

첫 번째 문자열은 불필요한 이스케이프 슬래시이므로 실제 문자열에는 슬래시가 하나만 있습니다. – pguardiario

+0

실제 답변이 아니지만 'string.gsub (% r! \\/!,' ')와 같은 대체 정규식 구문을 사용할 수 있습니다. '내가 얼마나 많은 시간을 빠져 나갈 수 있을까? 문제. – x1a4

답변

4

그 이유는 /\이 모두 Regexp에서 유효한 문자가 아니기 때문입니다. 따라서 그들은 전에 \을 넣어서 도망쳐 야합니다. 따라서 \\\으로되고 /\/이됩니다. 슬래시의 또 다른 세트 안에 함께이 퍼팅하는 것은 정규 표현식 리터럴을 만들기 위해, 우리가 얻을 :

string.gsub(/\\\//, "") 

이를 작성하는 또 다른 방법은 다음과 같습니다

string.gsub(/#{Regexp.escape('\/')}/, "") 

당신은 정규 표현식을 개발하는 좋은 방법을 Rubular 나 체크 아웃해야 문자열.

http://rubular.com/r/ml1a9Egv4B

+0

그러나 Niklas B. Regexp를 사용하기조차하지 않습니다. – nertzy

+0

당신은 보간법없이 정규식을 쓸 수 있습니다 :'string.gsub (Regexp.escape ("\ /"), " ')'. – steenslag

+0

실제로 그것은 같은 일을하지 않습니다. @steenslag. 첫째로, 나는 내가 대답 한 (내가 편집 한) 오류가 있음을 지적하고 싶다. ''\/''문자열은 작은 따옴표로 묶어서 루비가 그것을 /에서 이스케이프하지 않도록해야합니다. 다음으로,'Regexp.escape'는 문자열을 반환하므로, 여러분이 의도 한 것이 아닌'string.gsub ('/', '')'예를 들어 보겠습니다.대신 문자열을 직접 입력하거나 실제 Regexp 내부에'Regexp.escape'을 삽입해야합니다. 다 잘될 것입니다! – nertzy

0

그것은 실제로 당신이 무엇을 원하는 않습니다하지만 당신이 생각하는 이유 :

string = "word \/ word" 
# => "word/word" 
string.gsub(/\//, "") 
# => "word word" 

참고 : 당신이 GSUB이 필요 해요! 당신은 문자열의 내용을 바꾸려면

2
str = "word \/ word" 
p str.delete('\/') #=>"word word" 
# to get rid of the double spaces: 
p str.delete('\/').squeeze(' ') #=>"word word" 
+0

이것은 훨씬 더 우아한 방법입니다. – zachaysan