我正在尝试使用Python中的Parse库来解析日志。 (https://pypi.python.org/pypi/parse)出于我的目的,我需要使用格式字符串中的类型说明符,但是,我正在解析的一些数据可能是其中几种类型的组合。
例如:
"4.56|test-1 Cool|dog"
我可以使用格式说明符g(一般数字)解析前面的编号,并在结尾处使用w(word)作为“dog”。但是,中间短语“test-1 Cool”是一个数字,字母,空格和短划线。单独使用任何说明符似乎都不起作用(尝试过W,w,s和S)。我想将该短语提取为字符串。
如果没有问题短语,我会这样做:
test = "|4.56|dog|"
result = parse('|{number:g}|{word:w}|', test)
编辑:我使用如下所示的自定义类型转换取得了一些成功:
def SString(string):
return string
test = "|4.56|test-1 Cool|dog|"
result = parse('|{number:g}|{other:SString}|{word:w}|', test, dict(SString=SString))
答案 0 :(得分:2)
您可以使用以下代码执行此操作:
from parse import *
test = "4.56|test-1 Cool|dog"
result = parse('{number:g}|{other}|{word:w}', test)
print result
#<Result () {'other': 'test-1 Cool', 'word': 'dog', 'number': 4.56}>
此外,对于类型检查,您可以使用re
模块(例如):
from parse import *
import re
def SString(string):
if re.match('\w+-\d+ \w+',string):
return string
else:
return None
test = "|4.56|test-1 Cool|dog|"
result = parse('|{number:g}|{other:SString}|{word:w}|', test, dict(SString=SString))
print(result)
#<Result () {'other': 'test-1 Cool', 'word': 'dog', 'number': 4.56}>
test = "|4.56|t3est Cool|dog|"
result = parse('|{number:g}|{other:SString}|{word:w}|', test, dict(SString=SString))
print(result)
#<Result () {'other': None, 'word': 'dog', 'number': 4.56}>
答案 1 :(得分:1)
如何尝试
test.split("|")