使用Python从字符串中提取值

时间:2019-05-09 09:24:52

标签: python

我收到一个字符串

name="Mathew",lastname="Thomas",zipcode="PR123T",gender="male"

我需要获取值Mathew, Thomas, PR123T, male

此外,如果字符串没有邮政编码的值,则不应为字符串分配任何值。

我是python的新手。请帮助

3 个答案:

答案 0 :(得分:2)

您需要使用每个字符串上可用的.split()函数。首先,您需要用逗号,分隔,然后需要用=分隔并选择第1个元素。

完成此操作后,您需要再次.join()上用逗号分隔的元素,

def split_my_fields(input_string):
    if not 'zipcode=""' in input_string:
        output = ', '.join(e.split('=')[1].replace('"','') for e in input_string.split(','))
        print(f'Output is {output}')
        return output
    else:
        print('Zipcode is empty.')

split_my_fields(r'name="Mathew",lastname="Thomas",zipcode="PR123T",gender="male"')

输出:

>>> split_my_fields(r'name="Mathew",lastname="Thomas",zipcode="PR123T",gender="male"')
Output is Mathew, Thomas, PR123T, male
'Mathew, Thomas, PR123T, male'

答案 1 :(得分:0)

事实上,我亲爱的朋友,您可以使用parse

>>from parse import *
>>parse("name={},lastname={},zipcode={},gender={}","name='Mathew',lastname='Thomas',zipcode='PR123T',gender='male'")
<Result ("'Mathew'", "'Thomas'", "'PR123T'", "'male'") {}>

答案 2 :(得分:0)

您可以使用命名的组并使用与组名相对应的键创建字典:

import re

text = 'name="Mathew",lastname="Thomas",zipcode="PR123T",gender="male"'
expr = re.compile(r'^(name="(\s+)?(?P<name>.*?)(\s+)?")?,?(lastname="(\s+)?(?P<lastname>.*?)(\s+)?")?,?(zipcode="(\s+)?(?P<zipcode>.*?)(\s+)?")?,?(gender="(\s+)?(?P<gender>.*?)(\s+)?")?$')

match = expr.search(text).groupdict()

print(match['name'])      # Matthew
print(match['lastname'])  # Thomas
print(match['zipcode'])   # R123T
print(match['gender'])    # male

该模式将捕获括号之间的所有非空白字符,并去除其周围的空白。对于空的zipcode值,它将返回一个空字符串(其他命名组也是如此)。只要键的显示顺序保持不变(例如text = 'name="Mathew",lastname="Thomas",gender="male"'),它还将处理丢失的键值对。