gpt4 book ai didi

python - 正则表达式:将数字和字符串列表中的 '#' 前面的注释配对

转载 作者:太空宇宙 更新时间:2023-11-03 17:29:07 24 4
gpt4 key购买 nike

所以我有一些文本行存储在列表中,如下所示:

lines = ['1.9 #comment 1.11* 1.5 # another comment',
'1.23',
'3.10.3* #commennnnnt 1.2 ']

我想创建:

[{'1.9': 'comment'},
{'1.11*': ''},
{'1.5': 'another comment'},
{'1.23': ''},
{'3.10.3*': 'commennnnnt'},
{'1.2': ''} ]

换句话说,我想将列表分开,并将每个十进制数字与同一行中紧随其后出现的注释(以“#”开头;我们可以假设其中没有数字出现)配对,或者如果没有注释则使用空字符串(例如,它后面的下一个是另一个数字)。

具体来说,“十进制数字”可以是单个数字,后跟一个点,然后是一位或两位数字,也可以选择后跟一个点和一位或多两位数字。最后可能会出现“*”。就像这样(?): r'\d\.\d{1,2}(\.\d{1,2})?\*?')

我已经尝试使用 re.split() 进行一些操作来开始。例如,在担心字典配对之前,在疯狂的十进制正则表达式或 # 上拆分第一个列表项:

>>> crazy=r'\d\.\d{1,2}(\.\d{1,2})?\*?'

>>> re.split(r'({0})|#'.format(crazy), results[0])

结果:

[u'',
u'1.9',
None,
u' ',
None,
None,
u'comment ',
u'1.11',
None,
u' ',
u'1.5',
None,
u' ',
None,
None,
u' test comment']

这看起来像是我可以过滤和使用的东西,但是有更好的方法吗? (另外,哇……我疯狂的正则表达式中的括号似乎允许我根据需要保留小数分隔符!)

最佳答案

以下似乎有效:

lines = ['1.9 #comment 1.11* 1.5 # another comment',
'1.23',
'3.10.3* #commennnnnt 1.2 ']

entries = re.findall(r'([0-9.]+\*?)\s+((?:[\# ])?[a-zA-Z ]*)', " ".join(lines))
ldict = [{k: v.strip(" #")} for k,v in entries]

print ldict

这显示:

[{'1.9': 'comment'}, {'1.11*': ''}, {'1.5': 'another comment'}, {'1.23': ''}, {'3.10.3*': 'commennnnnt'}, {'1.2': ''}]

关于python - 正则表达式:将数字和字符串列表中的 '#' 前面的注释配对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32145551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com