搜索()类型错误:无法连接“str”和“NoneType”对象

2024-09-28 19:27:14 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我做了re.search("(\d+)x",下面的代码就可以正常工作了。在

{cdi>但是,如果要添加一个

TypeError: cannot concatenate 'str' and 'NoneType' objects

代码:

^{pr2}$

这个错误当然是因为我试图将str "+"和{}与{}连接起来。在

我的问题是,为什么选择group(1)re.search()中只有一个查找时有效,但是如果有两个可选的查找,则不起作用。在

它搜索的字符串不同时包含"(\d+)x"和{}两个选项,只有一个是可能的。在

示例str:

"Boost LevDAX 3x Daily ETP"
"ComStage LevDAX x2 UCITS ETF"

Tags: and代码researchobjects错误groupstr
3条回答

如果你只传递第一个字符串,你的程序就可以正常工作了。但是当你传递第二个字符串时,第二组就匹配了。组(1)为“无”,而组(2)为2。在

我将重写代码以分离这两个子表达式,并使用if语句来确定哪一个匹配。在

使用regex检查字符串是否为所需格式,如果是,则使用\d+提取所需的数字,因为字符串只能包含一个数字,如下所示:

请注意,这样做的好处是,如果leverage不是字符串中x3x所需的格式,则会引发错误

import re
fundleverage = None
regex_fundleverage = None
funddirection = "Long"
instrument_name = "ComStage LevDAX 3x UCITS ETF"
regex_fundleverage = re.search(r"(\b\d+x|x\d+\b)", instrument_name, flags=re.IGNORECASE)
if  regex_fundleverage:
    regex_fundleverage = re.search(r"(\d+)", regex_fundleverage.group(0), flags=re.IGNORECASE)
print(regex_fundleverage.group(0))
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

我会这样做:

regex_fundleverage = re.findall('(?<=x)\d+|\d+(?=x)',instrument_name, flags=re.IGNORECASE) 

if funddirection == "Long" and regex_fundleverage:
    fundleverage = "+" + regex_fundleverage[0] + "00"

if funddirection == "Short" and regex_fundleverage:
    fundleverage = "-" + regex_fundleverage[0] + "00"

print "Fundleverage: %s" % fundleverage

相关问题 更多 >