이스케이프 된 따옴표를 포함하여 따옴표 안에 JSON 키 이름을 구문 분석하려고합니다. 내 생각은 다음과 같습니다 (?<!\\)\"
가 화면 "하지만,하지 \"하지만 파이썬은 불균형 괄호에 대해 불평한다 \REGEX in Python : 무엇이 잘못 되었습니까? (! <! \) ". + (? <! \) "?
(?<!\\)\".+(?<!\\)\"
로 시작 따옴표 하지 사이에 아무것도 걸릴. 나는 (?<!\\\)\"
파이썬 행복 사용하지만이 작동하지 않는 경우
re.findall('(?<!\\\)\".+(?<!\\\)\"','"this is \"the\". key"."and this.is.the.child"')
리드 :
['"this is "the". key"."and this.is.the.child"']
내가 기대하는 경우 :
['"this is "the". key"', '"and this.is.the.child"']
분할을 동봉 점에서 "탈출하지 않고.
나는 '아무것도 필요하지는 않지만 esc가 필요하다고 느낀다. aped double quote '를 쓰지 만, [^"]
화면에 큰 따옴표가있는 경우, 문자를 리터럴로 사용하는 [] 집합 내에서 (?<!\\\)\"
표현식을 무효화하는 방법을 모르겠습니다. 나는 [^(?<!\\\)\"]
과 같은 것을 원하지만 작동하지 않습니다.
수; t이 작업을 수행 할 수있는 올바른 방법을 찾을 수가 ... 어떤 아이디어 도움을
감사
편집 :?
내 진정한 목표는 전체 '텍스트'를 분할 할 수있을 것입니다 JSON 키 이름을 사용하여 영숫자로만 변환 에스. 이 변환은 여기서는 관계가 없지만 목표는 키를 분할하여 계층 구조를 올바르게 나타 내기위한 것입니다. 키는 텍스트 형식입니다.
편집 2 :에 표시된대로
OmnipotentEntity이 .. 대부분 좋아, 파서를 작성하는 것이 기다려야 할 것이다 경우에도이 솔루션은 아래의 "\"또는 "\\"의 경우를 지원하지 않습니다 자신의 코멘트.
나는 큰 따옴표로 묶어야되지 않은 키에 대한 Avinash 라지 에서 대답하지만, 추가 지원에 의해 영감을"(?:\\"|[^"])*?"|(?<=\.)[^".]+?(?=\.)|^[^".]+?(?=\.)|(?<=\.)[^".]+?$
으로 정착 : 에는 따옴표로 끝나는 라인의 시작합니다. .key. 및 .lastkey [공백]을 같은 정규식으로 대체 할 때 발견 된 문자열 수보다 1 적은 요소를 찾거나 오류가 발생해야합니다. something like .. outside ""는 해당 테스트에 실패합니다.
JSON은 LL (1) 언어이지만 일반 언어는 아닙니다. 정규식을 사용하여 혼란 스러울 수도 있지만 정규 표현식에 의존하기보다는 실제 파서를 작성하는 것이 좋습니다. 이유는 더 쉽게 추론 할 수 있고 오류를 지적하기 때문입니다. – OmnipotentEntity