不太清楚正确的标题应该是什么。
我有2个输入def color_matching(color_old, color_new)
的功能。这个函数应该检查字符串两个参数并分配任意一个新的字符串,如果有一个打击。
def color_matching(color_old, color_new):
if ('<color: none' in color_old):
color_old = "NoHighlightColor"
elif ('<color: none' in color_new):
color_new = "NoHighlightColor"
等等。的问题是,每个参数可以匹配14 1的不同的类别(“NoHighlightColor”是其中之一)。我敢肯定有更好的方法来做到这一点不是重复的if语句28次,每次映射,但我画一个空白。
您可以在第一解析您的输入参数,例如,如果是这样的事情:
old_color='<color: none attr:ham>'
你可以解析它来获得你所需要的相关属性的唯一值:
_old_color=old_color.split(':')[1].split()[0]
这样_old_color='none'
然后你可以使用一本字典,其中{'none':'NoHighlightColor'}
,让我们把它叫做colors_dict
old_color=colors_dict.get(_old_color, old_color)
如果_old_color
存在在词典中old_color
一个键会拿到钥匙的价值通过这种方式,否则,old_color
将保持不变
因此,最终的代码应该类似于此:
def color_matching(color_old, color_new):
""" Assuming you've predefined colros_dict """
# Parsing to get both colors
_old_color=old_color.split(':')[1].split()[0]
_new_color=new_color.split(':')[1].split()[0]
# Checking if the first one is a hit
_result_color = colors_dict.get(_old_color, None)
# If it was a hit (not None) then assign it to the first argument
if _result_color:
color_old = _result_color
else:
color_new = colors_dict.get(_color_new, color_new)
你可以替换的数据结构条件语句:
def match(color):
matches = {'<color: none': 'NoHighlightColor', ... }
for substring, ret in matches.iteritems():
if substring in color:
return ret
但你似乎有需要要尝试识别格式正确的解析器问题。
你可能会从建立像"<color:none jaja:a>".split(':')
简单的字符串操作的一个
也许你可以砍一个具有巨大的正则表达式。
或者使用像this one图书馆产生了强大的解析器