복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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 [^, (] * (? : \ (. *? \))?

  5. from https://stackoverflow.com/questions/26633452/how-to-split-by-commas-that-are-not-within-parentheses by cc-by-sa and MIT license