单元测试正则表达式以检查误报

问题描述

所以我有一个 Regex 表达式,我将它与提供的单个字符串进行匹配,以检查和匹配某些信息。如果匹配,则只返回捕获的组。我已经制作了我的函数,以便它从返回的数组中删除任何空字符串,最后,只将捕获的字符串作为输出。这在 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 - 罗希特辛格

输入 2 - BRN-TO CASH SELF

输出 2 - '' //空字符串

解决方法

看来您可以使用AddItem("Axe1Common") function AddItem(item){ let text = '/Add$item/:playerid' app.get(text,(req,res)=>{ }); }; ,检查其输出,如果有匹配项,则过滤掉空匹配项并打印第一个匹配项。否则,打印一个空字符串。

this Python demo

re.findall

屈服

import re
combined = r'^BRN.*?(?:paid|to)\s(?![A-Za-z\s]*\bself\b)([A-Za-z\s]+)'
narrations = ['BRN CLG-CI IQ PAID ROHIT SINGH','BRN-TO CASH SELF']

for narration in narrations:
    print('-------',narration,sep='\n')
    match = re.findall(combined,flags=re.I)
    if match:
        result = list(filter(None,match))
        print( result[0] )
    else:
        print( '' )