2010-12-12 3 views
4

문자열의 외부 인용 부호로 작동하는 Ruby gem (또는 기본 제공 구문, 또는 기본 구문)을 아는 사람이 있습니까?문자열의 외부 따옴표를 수정하기위한 루비 코드?

는 나 자신이 또 다시이 같은 방법을 쓰기 발견 : 그 시작과 끝 문자가 chars에서 한 문자와 일치하는 경우

remove_outer_quotes_if_quoted(myString, chars) -> aString 
add_outer_quotes_unless_quoted(myString, char) -> aString 

첫 번째 테스트 myString 볼 수 있습니다. 그렇다면 따옴표가 제거 된 문자열을 반환합니다. 그렇지 않으면 변경되지 않은 값을 반환합니다. chars은 기본적으로 따옴표 문자 목록으로 설정됩니다.

두 번째 테스트 myString은 이미 시작되어 있는지 확인하고 char으로 끝납니다. 그렇다면 문자열을 변경하지 않고 반환합니다. 그렇지 않은 경우 char 문자열을 앞뒤로 묶어 반환하며 포함 된 문자는 char이며 백 슬래시로 이스케이프 처리됩니다. char은 기본 문자 목록의 첫 번째 문자로 기본 설정됩니다.

는 (내 손으로 자갈길 방법은 물론 같은 자세한 이름을 가지고 있지 않습니다.)

내가 공공의 repos에서 유사한 방법에 대한 주위를 둘러 보았다했지만 이런 건을 찾을 수 없습니다. 이 일을해야하는 유일한 사람입니까? 그렇지 않다면, 다른 사람들은 어떻게 이것을합니까?

+6

당신은 *을보고 할 수 있습니다 왜 많은 이렇게 *. 약간의 근본 원인을 분석하면 코드를보다 명확하게 만들 수 있습니다. –

+1

@ 마크 토마스 : 귀하의 의견을 더 많이 투표 할 수 있다면 그렇게 할 것입니다. 더 깊은 근본적인 문제가 있다고 생각하기 때문에. – mpd

+0

ㅎㅎ.근본적인 원인은 몇 가지 다른 API로 작업하고 있는데, 각 API는 동일한 데이터를 약간 다르게 인용합니다. 나는 그들에 대한 통제권이 없다. – Blue

답변

2

이 'splain 방법 제거하고 추가 할 수 있습니다

str1 = %["We're not in Kansas anymore."] 
str2 = %['He said, "Time flies like an arrow, Fruit flies like a banana."'] 

puts str1 
puts str2 

puts 

puts str1.sub(/\A['"]/, '').sub(/['"]\z/, '') 
puts str2.sub(/\A['"]/, '').sub(/['"]\z/, '') 

puts 

str3 = "foo" 
str4 = 'bar' 

[str1, str2, str3, str4].each do |str| 
    puts (str[/\A['"]/] && str[/['"]\z/]) ? str : %Q{"#{str}"} 
end 

원래 두 줄 :

# >> "We're not in Kansas anymore." 
# >> 'He said, "Time flies like an arrow, Fruit flies like a banana."' 

스트리핑 인용 : 필요한 경우 따옴표를 추가

# >> We're not in Kansas anymore. 
# >> He said, "Time flies like an arrow, Fruit flies like a banana." 

:

# >> "We're not in Kansas anymore." 
# >> 'He said, "Time flies like an arrow, Fruit flies like a banana."' 
# >> "foo" 
# >> "bar" 
당신이 그것을 많이 할 경우
+0

제안 해 주셔서 감사합니다. 나는 내 자신의 방법을 쓰고있다. (나는 크리스마스 전에 밤에 Twas와 같은 문자열을 다루어야 만한다. 그리고 다른 비정상적인 것들 중에서 이것은 비논리적이다.)하지만 나는 여기서 바퀴를 재발 명하고 있는지 궁금해하고 있었다. – Blue

4

, 당신은 문자열에 메서드를 추가 할 수 있습니다

class String 
    def strip_quotes 
    gsub(/\A['"]+|['"]+\Z/, "") 
    end 
end 

그럼 그냥 string.strip_quotes를 호출 할 수 있습니다.

따옴표를 추가하는 것은 유사합니다

class String 
    def add_quotes 
    %Q/"#{strip_quotes}"/ 
    end 
end 

string.add_quotes로 불리는 큰 따옴표를 추가하기 전에 strip_quotes를 사용합니다.

+0

위의 코드는 불일치 된 따옴표를 제거하고 문자열의 양쪽 끝에서 여러 따옴표를 제거하며 둘 다 "또는"인지 상관하지 않습니다. – TJChambers

0

나는 value = value[1...-1] if value[0] == value[-1] && %w[' "].include?(value[0])을 사용할 것입니다. 간단히 말해서,이 간단한 코드는 문자열의 첫 번째와 마지막 문자가 같은지 검사하고, 작은 따옴표/큰 따옴표 인 경우이를 제거합니다. 또한 필요한 많은 견적 유형을 추가 할 수 있습니다.

%w["adadasd" 'asdasdasd' 'asdasdasd"].each do |value| 
    puts 'Original value: ' + value 
    value = value[1...-1] if value[0] == value[-1] && %w[' "].include?(value[0]) 
    puts 'Processed value: ' + value 
end 

위 다음을 인쇄합니다 :

Original value: "adadasd" 
Processed value: adadasd 
Original value: 'asdasdasd' 
Processed value: asdasdasd 
Original value: 'asdasdasd" 
Processed value: 'asdasdasd" 
관련 문제