python re.search给出了返回None,即使字符串中存在子字符串

时间:2019-10-31 22:58:06

标签: python regex python-3.x

我正在尝试提取赋值运算符和条件运算符(和|或)的位置。我对正则表达式非常陌生,因此如果方法错误,请多多包涵。如果有人可以为上述声明提供正则表达式作为示例,我也将不胜感激。

现在,我正在通过一堆python函数解析字符串和括号以获取索引,并且我已经成功实现了。我想尝试使用正则表达式来查看它是否简化了解决方案。

test = "((condition one = 14) or ((condition two = 10) and (condition three = null)))"
re.search("(and$)", test).start()
m = re.search("and", test)
m.group()

预期结果-'and'起始位置的索引

实际结果-NoneType对象没有属性开始

2 个答案:

答案 0 :(得分:1)

您正在寻找正则表达式,例如:

test = "((condition one = 14) or ((condition two = 10) and (condition three = null)))"
i = re.search("(and)|(or)", test).start()
print i

这会打印出找到的第一个andor的位置:

22

编辑:要使用finditer,您需要对上述代码进行一些更新:

test = "((condition one = 14) or ((condition two = 10) and (condition three = null)))"
pattern = re.compile(r"(and)|(or)")
for m in pattern.finditer(test):
    print(m.start())

输出:

22
47

答案 1 :(得分:0)

只需输入您要查找的字词,即可简化正则表达式。

import re
test = "((condition one = 14) or ((condition two = 10) and (condition three = null)))"
i = re.search("and", test).start()
print(test[i:])
  

和(条件三=空))