[英]Parsing from format in Python
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"
編輯 Regexp可以解決這個問題,但是它們更難寫,我懷疑它們更慢,因為它們可以處理更復雜的結構。 我真的很喜歡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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.