我有以下字符串:
rake
我想动态分割线以得到如下所示的字典形状:
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}
在前三个元素中执行此操作,因为信息包含在新行拆分之前。
但是,对于“四个:”和“五个:”,在元素之前有一个“ \ n”,而我无法提取该元素。
有没有办法动态地做到这一点?
我能想到的唯一解决方案是在元素词列表之前过滤“ \ n”。
答案 0 :(得分: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)
答案 1 :(得分:1)
也许有更简洁的方法,但是您可以这样做:
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}