我有一个类似rdb_master_mongodb
的字符串,其中rdb_
已修复,master
是一个数据库名称,可以是任何内容,mongodb
可以是mysql
中的一个,mongodb
,postgres
,mssql
或bdb
。我需要从字典中获取此字符串的值,该字典的值为myDict[master][mongodb]
。为了实现这一点,我需要拆分字符串rdb_master_mongodb
并获取master
和mongodb
的值。我不能使用拆分,因为有时字符串变为rdb_master_test_mongodb
。因此,我必须使用endswith
来获取确切的密钥。但是,endswith
不适用于列表。
我必须从元组中获取匹配的元组值。现在我这样做:
import re
name = 'rdb_master_mongodb'
s = re.sub('rdb_', "", name)
VALID_DB = ('mysql', 'postgres', 'mongodb', 'mssql', 'bdb')
(a, b, c, d, e) = VALID_DB
if s.endswith(a):
db = a
if s.endswith(b):
db = b
if s.endswith(c):
db = c
if s.endswith(d):
db = d
if s.endswith(e):
db = e
db_name = re.sub('_'+db, "", s)
print db_name+" is "+db
有更好的方法吗?
答案 0 :(得分:1)
db = name.rsplit('_', 1)[1]
if db not in VALID_DB:
raise ValueError('Incorrect DB name: %s' % db)
答案 1 :(得分:1)
如果name
的格式始终相同,您可以先将其拆分为多个部分:
rdb, temp = name.split('_', 1)
master, db = temp.rsplit('_', 1)
然后检查db
是否有效:
VALID_DB = ('mysql', 'postgres', 'mongodb', 'mssql', 'bdb')
if db in VALID_DB:
...
然后使用这三个变量rdb, master, db
来构建所需的字符串。
答案 2 :(得分:0)
所以只有这个词的结尾是重要的,如果我理解你,在这种情况下我会尝试:
>>> VALID_DB = ('mysql', 'postgres', 'mongodb', 'mssql', 'bdb')
>>> name = 'rdb_master_mongodb'
>>> db_name = [db for db in VALID_DB if name.endswith(db)][0]
>>> db_name
'mongodb'
>>> name_test = 'rdb_master_test_mongodb'
>>> db_name = [db for db in VALID_DB if name_test.endswith(db)][0]
>>> db_name
'mongodb'