Revision 0ba7b031
b/kamaki/cli/utils.py | ||
---|---|---|
334 | 334 |
return terms |
335 | 335 |
|
336 | 336 |
|
337 |
def split_input(line): |
|
338 |
"""Use regular expressions to split a line correctly |
|
339 |
""" |
|
337 |
def old_split_input(line): |
|
338 |
"""Use regular expressions to split a line correctly""" |
|
340 | 339 |
line = ' %s ' % line |
341 | 340 |
(trivial_parts, interesting_parts) = _parse_with_regex(line, ' \'.*?\' ') |
342 | 341 |
terms = [] |
... | ... | |
347 | 346 |
return terms |
348 | 347 |
|
349 | 348 |
|
349 |
def _get_from_parsed(parsed_str): |
|
350 |
try: |
|
351 |
parsed_str = parsed_str.strip() |
|
352 |
except: |
|
353 |
return None |
|
354 |
if parsed_str: |
|
355 |
if parsed_str[0] == parsed_str[-1] and parsed_str[0] in ("'", '"'): |
|
356 |
return [parsed_str[1:-1]] |
|
357 |
return parsed_str.split(' ') |
|
358 |
return None |
|
359 |
|
|
360 |
|
|
361 |
def split_input(line): |
|
362 |
if not line: |
|
363 |
return [] |
|
364 |
reg_expr = '\'.*?\'|".*?"|^[\S]*$' |
|
365 |
(trivial_parts, interesting_parts) = _parse_with_regex(line, reg_expr) |
|
366 |
assert(len(trivial_parts) == 1 + len(interesting_parts)) |
|
367 |
#print(' [split_input] trivial_parts %s are' % trivial_parts) |
|
368 |
#print(' [split_input] interesting_parts %s are' % interesting_parts) |
|
369 |
terms = [] |
|
370 |
for i, tpart in enumerate(trivial_parts): |
|
371 |
part = _get_from_parsed(tpart) |
|
372 |
if part: |
|
373 |
terms += part |
|
374 |
try: |
|
375 |
part = _get_from_parsed(interesting_parts[i]) |
|
376 |
except IndexError: |
|
377 |
break |
|
378 |
if part: |
|
379 |
terms += part |
|
380 |
return terms |
|
381 |
|
|
382 |
|
|
350 | 383 |
def ask_user(msg, true_resp=['Y', 'y']): |
351 | 384 |
"""Print msg and read user response |
352 | 385 |
|
... | ... | |
358 | 391 |
stdout.flush() |
359 | 392 |
user_response = stdin.readline() |
360 | 393 |
return user_response[0] in true_resp + ['\n'] |
394 |
|
|
395 |
|
|
396 |
if __name__ == '__main__': |
|
397 |
examples = ['la_la le_le li_li', |
|
398 |
'\'la la\' \'le le\' \'li li\'', |
|
399 |
'\'la la\' le_le \'li li\'', |
|
400 |
'la_la \'le le\' li_li', |
|
401 |
'la_la \'le le\' \'li li\'', |
|
402 |
'"la la" "le le" "li li"', |
|
403 |
'"la la" le_le "li li"', |
|
404 |
'la_la "le le" li_li', |
|
405 |
'"la_la" "le le" "li li"', |
|
406 |
'\'la la\' "le le" \'li li\'', |
|
407 |
'la_la \'le le\' "li li"', |
|
408 |
'la_la \'le le\' li_li', |
|
409 |
'\'la la\' le_le "li li"', |
|
410 |
'"la la" le_le \'li li\'', |
|
411 |
'"la la" \'le le\' li_li', |
|
412 |
'la_la \'le\'le\' "li\'li"', |
|
413 |
'"la \'le le\' la"', |
|
414 |
'\'la "le le" la\'', |
|
415 |
'\'la "la" la\' "le \'le\' le" li_"li"_li', |
|
416 |
'\'\' \'L\' "" "A"' |
|
417 |
] |
|
418 |
|
|
419 |
for i, example in enumerate(examples): |
|
420 |
print('%s. Split this: (%s)' % (i + 1, example)) |
|
421 |
ret = old_split_input(example) |
|
422 |
print('\t(%s) of size %s' % (ret, len(ret))) |
Also available in: Unified diff