gpt4 book ai didi

python - 从 Python 中的格式解析

转载 作者:太空宇宙 更新时间:2023-11-03 13:50:57 25 4
gpt4 key购买 nike

在 Python 中有什么方法可以反转通过“%”运算符完成的格式化操作吗?

formated = "%d ooo%s" % (12, "ps")
#formated is now '12 ooops'
(arg1, arg2) = theFunctionImSeeking("12 ooops", "%d ooo%s")
#arg1 is 12 and arg2 is "ps"

EDIT 正则表达式可以解决这个问题,但它们更难编写,而且我怀疑它们会更慢,因为它们可以处理更复杂的结构。我真的很想要 sscanf 的等价物。

最佳答案

使用正则表达式(re 模块):

>>> import re
>>> match = re.search('(\d+) ooo(\w+)', '12 ooops')
>>> match.group(1), match.group(2)
('12', 'ps')

正则表达式尽可能接近您想要做的事情。没有办法使用相同的格式字符串 ('%d ooo%s')。

编辑:正如@Daenyth 所建议的,您可以使用此行为实现您自己的功能:

import re

def python_scanf(my_str, pattern):
D = ('%d', '(\d+?)')
F = ('%f', '(\d+\.\d+?)')
S = ('%s', '(.+?)')
re_pattern = pattern.replace(*D).replace(*F).replace(*S)
match = re.match(re_pattern, my_str)
if match:
return match.groups()
raise ValueError("String doesn't match pattern")

用法:

>>> python_scanf("12 ooops", "%d ooo%s")
('12', 'p')
>>> python_scanf("12 ooops", "%d uuu%s")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 10, in python_scanf
ValueError: String doesn't match pattern

当然,python_scanf 无法处理更复杂的模式,例如 %.4f%r

关于python - 从 Python 中的格式解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9084504/

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