첫 번째와 마지막 큰 따옴표를 제거하려면 어떻게해야합니까?


102

다음에서 큰 따옴표를 제거하고 싶습니다.

string = '"" " " ""\\1" " "" ""'

얻기 위해 :

string = '" " " ""\\1" " "" "'

내가 사용하려고 rstrip, lstrip그리고 strip('[^\"]|[\"$]')그러나 그것은 작동하지 않았다.

어떻게 할 수 있습니까?


5
정답은 아래와 같습니다. 에 대한 접근 방식과 관련 strip하여 a)이 메서드는 정규식을 인수로 사용하지 않습니다. b) 제공 한 정규식이 어쨌든 작동하지 않았을 것입니다. c)이 메서드는 하나가 아닌 모든 인접 문자를 제거하므로 당신은 두 개의 큰 따옴표를 잃었을 것입니다 .strip('"').
Tim Pietzcker

답변:


188

제거하려는 따옴표가 말한대로 항상 "처음과 마지막"이 될 경우 다음을 간단히 사용할 수 있습니다.

string = string[1:-1]


아래의 것이 더 안전합니다!
R 크레이븐

93

처리하는 모든 문자열에 큰 따옴표가 있다고 가정 할 수없는 경우 다음과 같이 사용할 수 있습니다.

if string.startswith('"') and string.endswith('"'):
    string = string[1:-1]

편집하다:

나는 당신이 방금 사용했던 해요 string여기 예시를 위해하고 유용한 이름이 실제 코드에서 변수 이름으로,하지만 난라는 이름의 모듈이 있음을 경고 할 의무가 기분이 string표준 라이브러리에. 자동으로로드되지는 않지만 사용 import string하는 경우 변수가이를 가려 내지 않는지 확인하십시오.


1
문자열이 ' "'(큰 따옴표 하나만)이면 단일 문자가 제거됩니다. 아마도 이것이 원하는 것이 아니라고 생각합니다. 아마도 Walapa는 일치하는 경우에만 큰 따옴표를 제거하려고했을 것입니다.
dbn

44

첫 번째와 마지막 문자를 제거하려면 각각의 경우 해당 문자가 큰 따옴표 인 경우에만 제거를 수행합니다.

import re

s = re.sub(r'^"|"$', '', s)

RE 패턴은 사용자가 지정한 것과 다르며 작업은 sub빈 대체 문자열 ( "대체")입니다 ( strip문자열 방법이지만 다른 답변에서 알 수 있듯이 요구 사항과 상당히 다른 작업을 수행함).


4
여기서 RE를 사용하는 것은 과잉 IMHO입니다. 나는 startsWith.
pihentagy

19
많은 Pythonistas는 RE에 대해 유사한 반응을 보입니다. 이는 실제로 정당하지 않습니다. RE는 매우 빠릅니다. 또한 게시 된대로 "선호하는"솔루션은 완전히 다른 작업을 수행합니다 ( 둘 다 큰 따옴표 인 경우에만 첫 번째 및 마지막 문자 제거 -OP의 사양과 다른 것처럼 보임)-선행 및 후행 따옴표 (있는 경우) 독립적으로 제거 할 필요가, 해당 솔루션은 4 문, 2 조건문 블록이된다 - 지금 의 과도 같은 일에 대해 하나의 빠른 발현 비교 -!)
알렉스 마르 텔리

44

중요 : 작은 따옴표 나 큰 따옴표를 제거하기 위해 질문 / 답변을 확장하고 있습니다. 그리고 나는 스트립을 수행하기 위해 두 따옴표가 모두 존재하고 일치해야 함을 의미하는 질문을 해석합니다. 그렇지 않으면 문자열이 변경되지 않고 반환됩니다.

문자열 표현을 "디 쿼트"하려면 주위에 작은 따옴표 또는 큰 따옴표가있을 수 있습니다 (@tgray의 대답의 확장입니다).

def dequote(s):
    """
    If a string has single or double quotes around it, remove them.
    Make sure the pair of quotes match.
    If a matching pair of quotes is not found, return the string unchanged.
    """
    if (s[0] == s[-1]) and s.startswith(("'", '"')):
        return s[1:-1]
    return s

설명:

startswith여러 대안 중 하나와 일치시키기 위해 튜플을 취할 수 있습니다. 배가 된 괄호에 대한 이유 (())우리가 하나 개의 매개 변수 전달이 너무 ("'", '"')에을 startswith()의 접두어보다는 두 개의 매개 변수를 허용 지정 "'"'"'접두사와 (무효) 시작 위치로 해석됩니다.

s[-1] 문자열의 마지막 문자입니다.

테스트 :

print( dequote("\"he\"l'lo\"") )
print( dequote("'he\"l'lo'") )
print( dequote("he\"l'lo") )
print( dequote("'he\"l'lo\"") )

=>

he"l'lo
he"l'lo
he"l'lo
'he"l'lo"

(나에게 정규 표현식은 읽기가 명확하지 않으므로 @Alex의 대답을 확장하려고 시도하지 않았습니다.)


1
첫 번째와 마지막 문자가 동일한 지 먼저 확인하면 첫 번째 문자가 따옴표인지 확인하기 만하면됩니다. def strip_if_quoted (name) : if name [0] == name [-1] and name [0 ] in ( " '",' " ') : 반환 이름 [1 : -1]
TomOnTime

@TomOnTime : 당신 말이 맞습니다. 좋은 최적화입니다. 나는 그것을 적용했다.
ToolmakerSteve 2014 년

4
2 자 이하의 문자열을 처리하는 것이 좋습니다. 현재이 함수는 길이가 0 인 문자열에 대해 인덱스 범위를 벗어난 예외를 throw 할 수 있습니다. 또한 1 자 길이의 문자열에서 따옴표를 제거 할 수 있습니다. 경비원 len(s) >= 2, 또는 유사한 것을 추가 할 수 있습니다 .
BrennanR

15

문자열이 항상 표시되는 경우 :

string[1:-1]

9

거의 완료되었습니다. http://docs.python.org/library/stdtypes.html?highlight=strip#str.strip 에서 인용

chars 인수는 제거 할 문자 집합을 지정하는 문자열입니다.

[...]

chars 인수는 접두사 또는 접미사가 아닙니다. 오히려 해당 값의 모든 조합이 제거됩니다.

따라서 인수는 정규 표현식이 아닙니다.

>>> string = '"" " " ""\\1" " "" ""'
>>> string.strip('"')
' " " ""\\1" " "" '
>>> 

이것은 문자열의 양쪽 끝에서 여러 개의 따옴표를 먹기 때문에 정확히 요청한 것이 아닙니다!


내 목적에 완벽하게 부합합니다! 감사합니다.
Harsh Wardhan 2016

4

제거하려는 시작과 끝에 "가있는 것이 확실한 경우 다음을 수행하십시오.

string = string[1:len(string)-1]

또는

string = string[1:-1]

2

문자열의 시작과 끝에서 결정된 문자열을 제거합니다.

s = '""Hello World""'
s.strip('""')

> 'Hello World'

1

작은 따옴표 나 큰 따옴표를 제거해야하는 코드가 있는데 ast.literal_eval을 할 수는 없습니다.

if len(arg) > 1 and arg[0] in ('"\'') and arg[-1] == arg[0]:
    arg = arg[1:-1]

이것은 ToolmakerSteve의 대답과 비슷하지만 길이가 0 인 문자열을 허용하고 단일 문자 "를 빈 문자열 로 바꾸지 않습니다 .


0

귀하의 예에서는 스트립을 사용할 수 있지만 공간을 제공해야합니다.

string = '"" " " ""\\1" " "" ""'
string.strip('" ')  # output '\\1'

출력의 \ '는 문자열 출력에 대한 표준 파이썬 따옴표입니다.

변수 값은 '\\ 1'입니다.


0

아래 함수는 빈 spce를 제거하고 따옴표없이 문자열을 반환합니다. 따옴표가 없으면 동일한 문자열을 반환합니다.

def removeQuote(str):
str = str.strip()
if re.search("^[\'\"].*[\'\"]$",str):
    str = str[1:-1]
    print("Removed Quotes",str)
else:
    print("Same String",str)
return str


-1

문자열에서 첫 번째와 마지막 "의 위치를 ​​찾으십시오.

>>> s = '"" " " ""\\1" " "" ""'
>>> l = s.find('"')
>>> r = s.rfind('"')

>>> s[l+1:r]
'" " " ""\\1" " "" "'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.