使用正則表達式(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
。
是:使用正則表達式。 – Marcin 2012-01-31 17:58:00
可能重複的[sscanf在Python](http://stackoverflow.com/questions/2175080/sscanf-in-python) – 2012-01-31 17:59:39
@MichaelMrozek謝謝,我忘了那個C函數的名稱 – AsTeR 2012-01-31 18:01:51