我收到一个字符串
name="Mathew",lastname="Thomas",zipcode="PR123T",gender="male"
我需要获取值Mathew, Thomas, PR123T, male
。
此外,如果字符串没有邮政编码的值,则不应为字符串分配任何值。
我是python的新手。请帮助
答案 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"'
),它还将处理丢失的键值对。