[PYTHON] 괄호 안에없는 쉼표로 분리하는 방법은 무엇입니까?
PYTHON괄호 안에없는 쉼표로 분리하는 방법은 무엇입니까?
항목이 쉼표로 구분되어 있지만 괄호로 묶은 내용이있는 항목에는 쉼표가있을 수 있습니다.
(편집 : 죄송합니다, 일부 항목에는 괄호 안의 내용이 없을 수 있음을 잊어 버렸습니다)
"Water, Titanium Dioxide (CI 77897), Black 2 (CI 77266), Iron Oxides (CI 77491, 77492, 77499), Ultramarines (CI 77007)"
괄호 안의 쉼표로만 문자열을 분할하려면 어떻게해야합니까? 즉 :
["Water", "Titanium Dioxide (CI 77897)", "Black 2 (CI 77266)", "Iron Oxides (CI 77491, 77492, 77499)", "Ultramarines (CI 77007)"]
아마도 정규식을 사용해야 할 것 같습니다. 아마도 다음과 같습니다.
([(]?)(.*?)([)]?)(,|$)
그러나 나는 아직도 그것을 작동 시키려고 노력하고있다.
해결법
-
==============================
1.부정적 예측을 사용하여 괄호 안에 들어 있지 않은 모든 쉼표를 일치시킵니다. 일치하는 쉼표에 따라 입력 문자열을 분할하면 원하는 출력을 얻을 수 있습니다.
부정적 예측을 사용하여 괄호 안에 들어 있지 않은 모든 쉼표를 일치시킵니다. 일치하는 쉼표에 따라 입력 문자열을 분할하면 원하는 출력을 얻을 수 있습니다.
,\s*(?![^()]*\))
데모
>>> import re >>> s = "Water, Titanium Dioxide (CI 77897), Black 2 (CI 77266), Iron Oxides (CI 77491, 77492, 77499), Ultramarines (CI 77007)" >>> re.split(r',\s*(?![^()]*\))', s) ['Water', 'Titanium Dioxide (CI 77897)', 'Black 2 (CI 77266)', 'Iron Oxides (CI 77491, 77492, 77499)', 'Ultramarines (CI 77007)']
-
==============================
2.str.replace와 str.split을 사용하면됩니다. 임의의 문자를 사용하여 대체 할 수 있음).
str.replace와 str.split을 사용하면됩니다. 임의의 문자를 사용하여 대체 할 수 있음).
a = "Titanium Dioxide (CI 77897), Black 2 (CI 77266), Iron Oxides (CI 77491, 77492, 77499), Ultramarines (CI 77007)" a = a.replace('),', ')//').split('//') print a
산출:-
['Titanium Dioxide (CI 77897)', ' Black 2 (CI 77266)', ' Iron Oxides (CI 77491, 77492, 77499)', ' Ultramarines (CI 77007)']
-
==============================
3.정규식을 사용해보십시오.
정규식을 사용해보십시오.
[^()]*\([^()]*\),?
암호:
>>x="Titanium Dioxide (CI 77897), Black 2 (CI 77266), Iron Oxides (CI 77491, 77492, 77499), Ultramarines (CI 77007)" >> re.findall("[^()]*\([^()]*\),?",x) ['Titanium Dioxide (CI 77897),', ' Black 2 (CI 77266),', ' Iron Oxides (CI 77491, 77492, 77499),', ' Ultramarines (CI 77007)']
regex가 http://regex101.com/r/pS9oV3/1에서 어떻게 작동하는지보십시오.
-
==============================
4.regex를 사용하면 findall 함수를 사용하여 쉽게 수행 할 수 있습니다.
regex를 사용하면 findall 함수를 사용하여 쉽게 수행 할 수 있습니다.
import re s = "Titanium Dioxide (CI 77897), Black 2 (CI 77266), Iron Oxides (CI 77491, 77492, 77499), Ultramarines (CI 77007)" re.findall(r"\w.*?\(.*?\)", s) # returns what you want
regex에 대해 더 잘 이해하고 싶다면 http://www.regexr.com/을 사용하고 여기에 파이썬 문서에 대한 링크가 있습니다. https://docs.python.org/2/library/re.html
편집하다 : 괄호없이 내용을 받아들이도록 정규식 문자열을 수정했습니다. \ w [^, (] * (? : \ (. *? \))?
from https://stackoverflow.com/questions/26633452/how-to-split-by-commas-that-are-not-within-parentheses by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] numpy에 대한 메모리 프로파일 러 (0) | 2018.11.22 |
---|---|
[PYTHON] 코드 완성을 통한 Python / django의 숭고한 텍스트 2 및 3 설정 (0) | 2018.11.22 |
[PYTHON] Google App Engine 용 Mac OSX 10.5.8에 PIL을 설치하는 방법은 무엇입니까? (0) | 2018.11.22 |
[PYTHON] SyntaxError invalid token (0) | 2018.11.22 |
[PYTHON] 파이썬 수퍼 클래스와 부모 클래스 속성 설정하기 (0) | 2018.11.22 |