Caused by: errorCode=QUERYILLEGAL0001 errorMsg= codeMsg=QRYILLEGAL0096
Caused by: java.lang.ArrayIndexOutOfBoundsException
以上两个字符串,想要截取(非匹配)Caused by: 之后的内容,直到遇见 errorMsg (倘若存在)。请问正则表达式应该怎么写?
str1 = 'Caused by: errorCode=QUERYILLEGAL0001 errorMsg= codeMsg=QRYILLEGAL0096'
str2 = "Caused by: java.lang.ArrayIndexOutOfBoundsException"
res1 = re.findall(r'Caused by: ((?!errorMsg=).)*', str1)
res2 = re.findall(r'Caused by: (?:(?!errorMsg=).)*', str1)
res3 = re.findall(r'Caused by: ((?:(?!errorMsg=).)*)', str1)
print(res1)
print(res2)
print(res3)
res4 = re.findall(r'Caused by: ((?!errorMsg=).)*', str2)
res5 = re.findall(r'Caused by: (?:(?!errorMsg=).)*', str2)
res6 = re.findall(r'Caused by: ((?:(?!errorMsg=).)*)', str2)
print(res4)
print(res5)
print(res6)
=================== RESTART: C:\Users\anonymous\Desktop\
test.py ===================
[' ']
['Caused by: errorCode=QUERYILLEGAL0001 ']
['errorCode=QUERYILLEGAL0001 ']
['n']
['Caused by: java.lang.ArrayIndexOutOfBoundsException']
['java.lang.ArrayIndexOutOfBoundsException']
三种写法:
re.findall(r'Caused by: ((?!errorMsg=).)*', str)
re.findall(r'Caused by: (?:(?!errorMsg=).)*', str)
re.findall(r'Caused by: ((?:(?!errorMsg=).)*)', str)
只有奇葩的第三种满足需求。为什么第一种得不到想要的结果?请问还有其它更“优雅”更简约的写法吗?
感谢!!