【发布时间】:2015-06-27 19:25:08
【问题描述】:
如果我执行re.search("(\d+)x",下面的代码将按预期工作。
但是,如果我添加替代搜索 re.search("(\d+)x|x(\d+)" 我会得到:
TypeError: cannot concatenate 'str' and 'NoneType' objects
代码:
fundleverage = None
regex_fundleverage = None
regex_fundleverage = re.search(r"(\d+)x|x(\d+)", instrument_name, flags=re.IGNORECASE)
if funddirection == "Long" and not regex_fundleverage == None:
fundleverage = "+" + regex_fundleverage.group(1) + "00"
if funddirection == "Short" and not regex_fundleverage == None:
fundleverage = "-" + regex_fundleverage.group(1) + "00"
print "Fundleverage: %s" % fundleverage
错误当然是因为我尝试将 str "+" 和 "00" 与 None 连接起来。
我的问题是为什么在 re.search() 中只有一个查找时选择 group(1) 有效,但如果有两个替代查找则不起作用。
它正在搜索的字符串不包含"(\d+)x" 和"x(\d+)" 这两个选项,只有一个是可能的。
示例字符串:
"Boost LevDAX 3x Daily ETP"
"ComStage LevDAX x2 UCITS ETF"
【问题讨论】:
-
如果您想要两个输出,请不要在
re.search中使用上述正则表达式,因为一旦找到第一个匹配项,搜索就会停止。 -
@AvinashRaj 字符串中只有一个备选方案。我是否正确理解它只会“寻找”第一个替代方案而不是第二个替代方案,因此如果不存在则将其设为“无”?
-
从不与无比较
-
如果我搜索
re.findall我得到:AttributeError: 'list' object has no attribute 'group' -
re.findall将返回找到的项目列表而不是组