使用Python Parse获取一串数字,字母,空格和符号

时间:2017-04-19 15:02:32

标签: python string parsing

我正在尝试使用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))

2 个答案:

答案 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("|")