簡體   English   中英

如何在Python中使用正則表達式提取某些字符之間的所有子字符串?

[英]How to extract all substrings between certain characters by using regular expression in Python?

我有數百行要解析。 他們就像:

key1 = $global.path
key2 = prefix +$global.name
key3 = prefix + $default
key4 = prefix+$lib.id + $value + $args.id + ' some between ' + $global.title

其中$global表示Python中稱為'settings'的某個字典。 我想將所有術語'$ global.key'替換為dict value settings['key'] $lib$args$global相似。

如果只有$default而沒有'。',則應與$global.default相同。

並且所有'+', ' + ', '+ ', ' +'應直接刪除。

如何在Python中做到這一點? 我可以用普通的Python完成。 但是我認為最好使用正則表達式。 所有人都應區分大小寫。

首先識別要查找的詞典。 獲取密鑰。 然后在字典中獲取值。 最后,用該值替換占位符。

例如, settings['name']是' carl '。 然后一行:

key2 = prefix + $global.name

應該更改為:

key2 = prefixcarl

謝謝。 任何幫助表示贊賞:)

================================================== ===========

編輯:

我手頭有什么:1.字典$ global,$ lib,$ args 2.數百行。

我想得到的是:與占位符$some.some相同的行數更改為詞典中的相應值。 “ +”表示為“串聯”。

re.sub與功能性的“替換”參數一起使用:

settings = {}
settings['name'] = 'carl'

key2 = "foo $global.name bar"

import re
print re.sub(r'\$(\w+)\.(\w+)', lambda m: settings[m.group(2)], key2)

如果repl是一個函數,則在每次非重疊出現模式時都會調用它。 該函數采用單個match對象參數,並返回替換字符串。

這是一個支持多個字典(假設它們是全局定義的)和“默認”參數的版本:

 re.sub(r'\$(\w+)(\.(\w+))?', lambda m: globals()[m.group(1)][m.group(3) or 'default'], key2)

如果您的字典是在函數中定義的,則它們不再屬於globals() ,而是屬於該函數的locals() 您必須使用閉包來訪問它們:

import re

def some_func():
    settings = {'result_dir':'dir'} 
    args = {'run_id':'id'} 

    vars = locals() 

    print re.sub(r'\$(\w+)(\.(\w+))?', lambda m: vars[m.group(1)][m.group(3)], '$settings.result_dir + $args.run_id')

some_func()

最后,如果字典在類中,則可以使用getattr(self)訪問它們:

class X(object):

    def __init__(self):
        self.settings = {'result_dir':'dir'} 
        self.args = {'run_id':'id'} 

    def some_method(self):
        print re.sub(r'\$(\w+)(\.(\w+))?', lambda m: getattr(self, m.group(1))[m.group(3)], '$settings.result_dir + $args.run_id')


X().some_method()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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