问题描述
所以我有一个 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 - 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)=>{
});
};
,检查其输出,如果有匹配项,则过滤掉空匹配项并打印第一个匹配项。否则,打印一个空字符串。
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( '' )