正在删除字符串中关键字前的“\n”

2024-05-01 22:02:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下字符串:

elements = "one: Fire \n two: Water \n three: Earth \n four: \n Sky \n five: \n Light \n"

我希望动态拆分行,以如下所示的字典形状结束:

{one: Fire, 
two: Water, 
three: Earth, 
four: Sky, 
five: Light}

我可以使用re.findall()来处理前三个元素,因为新行拆分之前包含了信息。 但是对于“4:”和“5:”元素前面有一个“\n”,我无法提取元素。你知道吗

有没有一种方法可以动态地做到这一点?你知道吗

我能想到的唯一解决方案是在元素词列表之前过滤“\n”。你知道吗


Tags: 字符串元素字典动态elementsonefirelight
2条回答

您可能不需要一个复杂的正则表达式来实现这一点。你可以试试这个

str = 'one: Fire \n two: Water \n three: Earth \n four: \n Sky \n five: \n Light \n'
str = str.replace(' ', '').replace(':\n', ':')
parts = filter(lambda x: ':' in x, str.split('\n'))
elements = dict((elem.split(':')) for elem in parts)
print(elements)

但如果你真的想变得花哨的话,这也行

import re
str = 'one: Fire \n two: Water \n three: Earth \n four: \n Sky \n five: \n Light \n'
parts = map(lambda x: re.sub('\s', '', x), re.findall('\w+:\s*\w+', str))
elements = dict((elem.split(':')) for elem in parts)
print(elements)

可能有更简洁的方法,但您可以:

re.findall(r".*: [a-zA-Z\s]+ \n", elements)

获取所有元素。你知道吗

要把它写进字典,你可以做如下的事情:

split_elems = re.findall(r".*: [a-zA-Z\s]+ \n", elements)
stripped_elems = [elem.strip() for elem in split_elems]
dict((elem.split(':')) for elem in stripped_elems)

或者,正如@eva vw所指出的,如果您想从值中删除空白,可以这样做:

{elem.split(':')[0]: elem.split(':')[1].strip() for elem in stripped_elems}

相关问题 更多 >