2015-01-20 5 views
-1

아래에는 이중 qouted 값의 공백을 무시하는 등의 구분 기호 공백을 사용하여 분할 할 문자열이 있습니다. 예 :복잡한 문자열을위한 Python 정규식

string = '3e656b8e06c176 el-s3-log-file [24/Dec/2014:11:54:18 +0000] 
202.141.245.38 arn:aws:iam::xxxxx:user/xyz E27FFBA2CA3D61F3 REST.GET.OBJECT 
logs/2014-12-23-09-25-19-E39257 "GET /el-s36 HTTP/1.1" 200 - 660 660 30 30 
"https://s3-console-us-standard/Console.html?region&locale=en" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -' 

values = string.split(' ') 

위의 값은 이중으로 qouted 값도 나눕니다. Example: ['"GET', '/el-s36', 'HTTP/1.1"']

이중 qout 내부의 공백을 무시하고 []의 공백을 무시하고 싶습니다.

답변

0

줄 바꿈도 일치하는 공백 대신 \s을 사용하십시오. 즉, 줄 바꿈뿐만 아니라 공백에 따라 입력을 분할합니다.

>>> re.split(r'\s+(?=(?:"[^"]*"|[^"])*$)', string) 
['3e656b8e06c176', 'el-s3-log-file', '[24/Dec/2014:11:54:18', '+0000]', '202.141.245.38', 'arn:aws:iam::xxxxx:user/xyz', 'E27FFBA2CA3D61F3', 'REST.GET.OBJECT', 'logs/2014-12-23-09-25-19-E39257', '"GET /el-s36 HTTP/1.1"', '200', '-', '660', '660', '30', '30', '"https://s3-console-us-standard/Console.html?region&locale=en"', '"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"', '-'] 

업데이트 :

이 큰 따옴표 또는 [] 내부에 존재하지 않았다 공간에 따라 입력 문자열을 분할한다.

>>> re.split(r'\s+(?=(?:"[^"]*"|[^"])*$)(?![^\[\]]*\])', string) 
['3e656b8e06c176', 'el-s3-log-file', '[24/Dec/2014:11:54:18 +0000]', '202.141.245.38', 'arn:aws:iam::xxxxx:user/xyz', 'E27FFBA2CA3D61F3', 'REST.GET.OBJECT', 'logs/2014-12-23-09-25-19-E39257', '"GET /el-s36 HTTP/1.1"', '200', '-', '660', '660', '30', '30', '"https://s3-console-us-standard/Console.html?region&locale=en"', '"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"', '-'] 
+0

이유 downvote (탐욕의 적당량으로 업데이트)? 이것은 op가 물었던 것이다. .. –

+0

한 가지 예외는 있지만 답변 해 주셔서 감사합니다. [] 안의 값은 공간을 너무 슬쩍 무시해야합니다. 예 '[24/Dec/2014 : 11 : 54 : 18 +0000]'은 단일 값으로 취급됩니다. – user1986059

+0

@ user1986059 내 업데이트를 참조하십시오 .. –

0
re.findall('(".*?"|\[.*?\]|[^ ]+)',string) 

+0

분할되지 않음 : 200 60 30 – user1986059

+0

고정되어 있으며 따옴표 안에 너무 욕심 거리고 있습니다. –