我有一小段正则表达式,用于生成新字符串:
someinput = "some/very/long/string"
changedinput = re.match("(.*\/)", str(thisDir)).group(1)[:-1]
我使用.group(1)[:-1]
获取实际字符串,此代码需要适用于所有类型的字符串
如果此处的输入字符串是“blbalba”,则不存在匹配项,并且正则表达式将返回Nonetype,因此,在进行grou()调用时会出现此错误:
'NoneType' object has no attribute 'group'
我可以用这样的结构来解决:
someinput = "some/very/long/string"
tmp = re.match("(.*\/)", str(bla))# .group(1)[:-1]
if (tmp):
changedinput = tmp.group(1)[:-1]
else:
changedinput = ""
虽然我需要六行代码来完成这个非常简单的构造,但这确实让我很恼火。 因此,我开始在python中搜索类似elvis构造函数的东西,并找到了或“运算符。 然后我想我可以做这样的事情:
someinput = "some/very/long/string"
changedinput = re.match("(.*\/)", str(someinput)).group(1)[:-1] or ""
这里的原因是,如果不匹配,那么group()调用将再次抛出相同的错误
有没有什么方法可以做到这一点,用很少的代码行,用一种很好的方式
你可以这样做:
这也更“pythonic”,因为它的代码更少,但效率更低,因为您要调用
re.match()
两次:可以使用赋值表达式:
调用
re.match
,并在布尔上下文中对其求值之前将其返回值赋值给tmp
。如果为true,则使用tmp
的值来调用group
,而不是第二次调用re.match
相关问题 更多 >
编程相关推荐