입력 문자열이 key:"value",key2:"value"
의 형식을 취하는 키 - 값 파서를 만들고 있습니다. 키에는 a-z
, A-Z
및 0-9
문자가 포함될 수 있으며 값에는 임의 문자가 포함될 수 있지만 :
, ,
, "
및 \
에는 백 슬래시가 필요합니다. 쉼표는 키 - 값 쌍을 분리하는 데 사용되지만 마지막 쌍 이후에는 필요하지 않습니다.일치하는 키 - 값 패턴 정규식
지금까지 대부분의 키와 값과 일치하는 ([a-zA-Z0-9]+):"(.*)"
이 있지만 분명히 한 쌍 이상을 처리 할 수 없거나 '제어'문자 중 하나가 이스케이프 처리되지 않는 경우는 분명 없습니다. (?<=\\)[:,"\\]
은 이스케이프 된 모든 문자와 일치하는 것으로 보이지만 '정상'문자와 일치하지 않습니다.
쉼표 분리를 확인하고 이스케이프 처리 된 모든 '제어'문자 및 일반 문자를 일치시키는 방법이 있습니까? 이것은 정규식없이 구현하는 것이 더 낫겠습니까? 아니면 순차적으로 여러 패턴이 필요합니까?
몇 가지 예 :
입력 : joe:"bread",sam:"fish"
출력 : joe -> bread
sam -> fish
입력 : joe:"Look over there\, it's a shark!",sam:"I like fish."
출력 : joe -> Look over there, it's a shark!
sam -> I like fish
예상 결과와 함께 예제를 제공 할 수 있습니까? –
왜'input_string.split (",")'을 사용하지 않고 결과와'result.split (":")'을 반복하지 않으면 루프에서 원하는 키 -> 쌍을 찾을 수 있습니다. – gwillie
새 행을 값의 일부로 포함 할 수 있습니까? 그리고 그 값에 어떻게 지정되어 있습니까? – nhahtdh