다음 문자열이 있고 csv없이 아래 출력을 원한다고 가정 해 보겠습니다.
this, "what I need", to, do, "i, want, this", to, work
this
what i need
to
do
i, want, this
to
work
이 문제는이 질문에서 "...을 제외한 패턴 정규식 일치" 기술의 전형적인 경우입니다.
아름답고 간단한 정규식으로 해결할 수 있습니다.
"([^"]+)"|[^, ]+
대체의 왼쪽은 |
완전한 "인용문"과 일치하고 내용을 Group1에 캡처합니다. 오른쪽은 쉼표도 공백도 아닌 문자와 일치하며 왼쪽의 표현식과 일치하지 않았기 때문에 올바른 문자임을 알고 있습니다.
옵션 2 : 여러 단어 허용
입력에서 모든 토큰은 단일 단어이지만 정규식이에서 작동하도록 my cat scratches, "what I need", your dog barks
하려면 다음을 사용하십시오.
"([^"]+)"|[^, ]+(?:[ ]*[^, ]+)*
유일한 차이점은 (?:[ ]*[^, ]+)*
선택적으로 공백 + 문자를 0 회 이상 추가 하는 추가입니다 .
이 프로그램은 정규식을 사용하는 방법을 보여줍니다 ( 온라인 데모 하단의 결과 참조 ).
subject = 'this, "what I need", to, do, "i, want, this", to, work'
regex = /"([^"]+)"|[^, ]+/
# put Group 1 captures in an array
mymatches = []
subject.scan(regex) {|m|
$1.nil? ? mymatches << $& : mymatches << $1
}
mymatches.each { |x| puts x }
산출
this
what I need
to
do
i, want, this
to
work
참고
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다