문자열 분석 라이브러리에 익숙하지 않습니다. 과에서 가고 싶습니다 이에문자열의 일부를 사전으로 구문 분석 하시겠습니까?
'foo=5 z v xz er bar=" hel o" c z a == "hi" b = "who"'
사전 분석 :
{'foo':5, 'bar': ' hel o', 'a': 'hi', b: 'who'}
을하지만 시작하는 곳 모르겠습니다. 이 전환을 처리하기위한 조언을 좀 주시겠습니까?
문자열 분석 라이브러리에 익숙하지 않습니다. 과에서 가고 싶습니다 이에문자열의 일부를 사전으로 구문 분석 하시겠습니까?
'foo=5 z v xz er bar=" hel o" c z a == "hi" b = "who"'
사전 분석 :
{'foo':5, 'bar': ' hel o', 'a': 'hi', b: 'who'}
을하지만 시작하는 곳 모르겠습니다. 이 전환을 처리하기위한 조언을 좀 주시겠습니까?
정규 표현식을 사용할 수 있습니다. python's documentation on regex 또는 tutorial's point tutorial을 참조하십시오. 이 같은
뭔가 작업 할 수 있습니다
import re
regex = re.compile(r"(\w+ ?=+ ?\d+|\w+ ?=+ ?\"(?: *\w*)*\")")
#your example string:
s = 'foo=5 z v xz er bar=" hel o" c z a == "hi" b = "who"'
matches = regex.findall(s)
dict1 = {}
for m in matches:
elems = m.split("=")
#elems[0] = key
#elems[len(elems)-1] = value, to account for the case of multiple ='s
try:
#see if the element is a number
dict1[str(elems[0])] = int(elems[len(elems) - 1])
except:
#if type casting didn't work, just store it as a string
dict1[str(elems[0])] = elems[len(elems) - 1]
여기에 분류 정규 표현식이다 :
(\w+ ?=+ ?\d+|\w+ ?=+ ?\"(?: *\w*)*\")
\w+
하나 개 이상의 알파벳 문자를 의미합니다.
\d+
은 하나 이상의 숫자를 의미합니다.
(?:regex)*
은 그룹 #을 지정하지 않고 정규식을 0 개 이상 복사하는 것을 의미합니다.
(regex1|regex2)
은 regex1과 일치하거나 regex2와 일치하는 문자열을 찾습니다.
\"
은 따옴표의 이스케이프 시퀀스입니다.
=+
이 일치 하나 또는 그 이상의 "="표시를 의미
_?
은 경기를 0 또는 1 공간을 의미합니다 (척은 "_"공간이다)
대한 파싱은 당신이 만들 수있는 구문 분석 라이브러리는 한 번에 조금씩 일치하는 식. 여기
from pyparsing import Word, alphas, alphanums, nums, oneOf, quotedString, removeQuotes
identifier = Word(alphas, alphanums)
integer = Word(nums).setParseAction(lambda t: int(t[0]))
value = integer | quotedString.setParseAction(removeQuotes)
# equals could be '==' or '='
# (suppress it so it does not get included in the resulting tokens)
EQ = oneOf("= ==").suppress()
# define the expression for an assignment
assign = identifier + EQ + value
는
# search sample string for matching assignments
s = 'foo=5 z v xz er bar=" hel o" c z a == "hi" b = "who"'
assignments = assign.searchString(s)
dd = {}
for k,v in assignments:
dd[k] = v
# or more simply
#dd = dict(assignments.asList())
print dd
주는이 파서 적용하는 코드입니다 :
{'a': 'hi', 'b': 'who', 'foo': 5, 'bar': ' hel o'}
에게 그래서'v','xz','하지 er' 등 일 등호가 바닥에 떨어졌을까요? 또한 파이썬에서 시작하는 곳은 아마도 [shlex] (http://docs.python.org/2/library/shlex.html) 일 것입니다. – zwol
'='또는'=='이없는 것은 모두 사전에 있어서는 안됩니다. (나는 그들을 분리 된 단계에서 다루고있다) –