如何在Dart中实现类似MySQL FIND_IN_SET的字符串匹配逻辑
实现思路与代码示例
要实现你描述的匹配逻辑,核心是先判断待匹配字符串是否为逗号分隔的选项集合,再分别采用不同的匹配规则:
核心逻辑步骤
- 第一步:检查待匹配字符串是否包含逗号(
,):- 如果包含逗号:将字符串按逗号分割,清理掉每个选项前后的空白字符,同时过滤掉分割后产生的空字符串(比如末尾逗号导致的空项),然后判断输入字符串是否是这个清理后的选项列表中的一员
- 如果不包含逗号:直接判断输入字符串和待匹配字符串是否完全相等
代码实现(Python)
这里用Python写一个通用的匹配函数,方便你直接测试:
def match_target(input_str, target_str): # 检查目标字符串是否是逗号分隔的选项 if ',' in target_str: # 分割并清理每个选项:去掉前后空格,过滤空字符串 options = [opt.strip() for opt in target_str.split(',') if opt.strip()] return input_str in options else: # 无逗号则要求完全匹配 return input_str == target_str
验证你的示例
我们来逐一验证你给出的场景:
测试String1(
"baby,fetus,")和输入"baby":print(match_target("baby", "baby,fetus,")) # 输出: True解释:String1包含逗号,分割清理后得到
["baby", "fetus"],输入"baby"在列表中,返回True。测试String2(
"baby fetus")和输入"baby":print(match_target("baby", "baby fetus")) # 输出: False解释:String2没有逗号,直接比较"baby"和"baby fetus",不相等,返回False。
测试String3(
"baby fetus, baby boy,")和输入"baby fetus":print(match_target("baby fetus", "baby fetus, baby boy,")) # 输出: True解释:String3包含逗号,分割清理后得到
["baby fetus", "baby boy"],输入在列表中,返回True。测试String3和输入
"baby":print(match_target("baby", "baby fetus, baby boy,")) # 输出: False解释:清理后的选项列表里没有"baby"这个单独项,返回False。
这个逻辑完全符合你提出的规则,而且处理了末尾逗号、选项前后空格的边缘情况,适用性更强。
内容的提问来源于stack exchange,提问作者Azhar
相关产品推荐
相关产品推荐

