【发布时间】:2021-08-21 18:20:36
【问题描述】:
所以我有一个正则表达式,我正在与提供的单个字符串进行匹配,以检查和匹配某些信息。如果匹配,则仅返回捕获的组。我已经创建了我的函数,以便它从返回的数组中删除任何空字符串,最后,只将捕获的字符串作为输出。这在 True Positives 的单元测试中非常有用。
现在,我想使用相同的表达式检查误报,但我似乎无法弄清楚如何在单元测试中演示它。我在一个文件中有一些测试字符串,正则表达式不应该匹配,但它不匹配。所以我的代码有效。但是当我尝试在测试用例中实际展示这一点时,例如检查是否返回了空字符串,我做不到。
我本质上想检查是否找不到匹配项,那么它应该返回一个空字符串。这是我的代码
match = re.findall(combined, narration)
result = list(filter(None, match[0]))
if match:
return result[0]
else:
result[0] = ""
return result[0]
第一个子句适用于匹配的字符串,并返回单个字符串作为输出。在第二个子句中,我想输出一个空字符串,以便我可以检查测试用例.assertEqual 是否该字符串不匹配。但是函数返回list index out of range错误。
谁能告诉我是否有更好的方法来使用正则表达式和单元测试检查不匹配的字符串?
编辑 1: 按要求添加预期的输入和输出
输入 1 - BRN CLG-CI IQ PAID ROHIT SINGH
输出 1 - ROHIT SINGH
输入 2 - BRN-TO CASH SELF
输出 2 - '' //空字符串
【问题讨论】:
-
当
re.findall没有找到任何东西时,它返回一个空列表。 -
是的,我确实看到了那篇文章,并在其后添加了 else 子句。即使我为“”字符串添加括号,它也会显示相同的错误。
-
好的,我知道你只需要一个字符串中的一个匹配项。你不需要
re.findall。使用re.search:match = re.search(combined, narration)然后if match: print(match.group(1)) else: print('No match'),见ideone.com/l0VMcN -
是的,我正在匹配但针对多种模式,因此我也从一个句子中提取了多个单词。所以对于我的用例,我不能使用
re.search。我可以使用re.findall方法实现相同的技术吗?
标签: python regex unit-testing false-positive