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


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.