我有一组工作代码,它遍历字符串并搜索2个相关的子字符串。 (请向用户@bulbus寻求帮助!)
代码返回一个元组列表,其中包含每个子字符串的下一个实例的位置的索引位置。
例如,如果字符串和子字符串看起来像这样:
sub_A = "StringA"
sub_B = "StringB"
s = "abcdefStringAghijklStringB"
然后代码返回元组(6,19)
,因为这是存在两个字符串的下一个索引位置。
代码的相关部分如下所示:
[(m.start(),re.compile(sub_b).search(s,m.start()).start()) for m in re.finditer(sub_A,s)]
但是,我想更改代码,以便在值为偶数时仅将值返回给元组。 I.E.在上面我的例子中,值为" 19"不应该是有效的回报。
举个例子,让我们说这是我的新字符串:
xxStringAStringBStringB
我希望元组返回(2,16)
。因为那些是下一个有效的"回报。
我的代码目前返回(2,9)
但我想跳过" StringB"在索引9,因为它是一个奇数。
思考?谢谢!!
答案 0 :(得分:1)
>>> s = "abcdefStringAghijklStringB"
>>> [(m.start(),next((x.start() for x in re.compile(sub_B).finditer(s,m.start()) if x.start()%2==0),None)) for m in re.finditer(sub_A,s)]
[(6, None)]
>>> s='xxStringAStringBStringB'
>>> [(m.start(),next((x.start() for x in re.compile(sub_B).finditer(s,m.start()) if x.start()%2==0),None)) for m in re.finditer(sub_A,s)]
[(2, 16)]
finditer
查找sub_B
之后的所有sub_A
,但我们需要在满足sub_B
,我们希望迭代在这种情况下返回默认值,我们选择None