簡體   English   中英

從Python格式解析

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM