我要使用python脚本处理文件。该文件是自动创建的,因此可以在键之前和之后添加一些字符。所以我想用正则表达式来匹配它们(中间部分总是相同的,它们有任何麻烦):
def dict(x):
return{
'.*key1.*': 'blabla',
'.*key2.*': 'thing'
}.get(x,'default')
这不起作用,因为".*"
代表字符。
如何执行此操作?
答案 0 :(得分:2)
或者,如何使用此RegexDict
class RegexDict(dict):
import re
def __init__(self, *args, **kwds):
self.update(*args, **kwds)
def __getitem__(self, required):
for key in dict.__iter__(self):
if self.re.match(key, required):
return dict.__getitem__(self, key)
return dict.__getitem__(self, key) # redundancy but it can handle exceptions.
regex_dict = RegexDict({'.*key1.*':'blabla', '.*key2.*':'thing'})
print regex_dict['foo_key1_bar'] # blabla
print regex_dict['foo_key2_bar'] # thing
答案 1 :(得分:1)
您需要自己匹配文件。 get
无法为您做到这一点。
您想要的可能是
def get_content(filename):
lookup = (
(r'.*key1.*', 'blahblah',),
(r'.*key2.*', 'thing',),
)
for pattern, content in lookup:
if re.match(pattern, filename):
return content
这里有很多可以优化的东西,但这个想法就在那里。
编辑:
正如mskimm和Grijesh Chauhan所指出的,问题中附带的代码还有两个需要指出的问题:
dict
用作函数或变量名称,因为它是built-in type的名称。r
的文字,r'like this'
)而不是标准字符串文字('like this'
),因为正则表达式模式使用需要经常逃避的字符。本答案中的代码反映了以上两点。