Python 忽略基于周围字符的正则表达式拆分中的大小写
我有一个字符串,我想用某些特殊字符分割。但我不想在方括号内拆分任何内容。如何设置正则表达式以忽略方括号内的案例Python 忽略基于周围字符的正则表达式拆分中的大小写,python,python-3.x,regex,split,Python,Python 3.x,Regex,Split,我有一个字符串,我想用某些特殊字符分割。但我不想在方括号内拆分任何内容。如何设置正则表达式以忽略方括号内的案例 formula = '[var1]+[v/ar/2]^var3/var4' #assume no spaces in the formula re.split('[-+*/&,^%]',formula) #produces ['[var1]', '[v', 'ar', '2]', 'var3', 'var4'] 期望输出: ['[var1]', '[v/ar/2]', 'va
formula = '[var1]+[v/ar/2]^var3/var4' #assume no spaces in the formula
re.split('[-+*/&,^%]',formula) #produces ['[var1]', '[v', 'ar', '2]', 'var3', 'var4']
期望输出:
['[var1]', '[v/ar/2]', 'var3', 'var4']
我想我需要使用一些奇特的负前瞻和负前瞻,但我还没有找到一个有效的组合。我的解决方案(没有任何巫毒正则表达式)是将其分为3个步骤:
请您尝试以下方法:
import re
formula = '[var1]+[v/ar/2]^var3/var4' #assume no spaces in the formula
m = re.findall(r'\[.+?\]|\w+', formula)
print(m)
输出:
['[var1]', '[v/ar/2]', 'var3', 'var4']
正则表达式\[.+?\]\124;\ w+
与以下任一项匹配:
- 用方括号括起来的任何东西
- 非特殊字符的序列
捕获组1,从开始到结束方括号捕获(\[[^][]*])
或|
匹配要拆分的任何列出的字符[-+*/&,^%]
import re
s="[var1]+[v/ar/2]^var3/var4"
result = list(filter(None, re.split(r"(\[[^][]*])|[-+*/&,^%]", s)))
print(result)
输出
['[var1]', '[v/ar/2]', 'var3', 'var4']
你能解释一下第一组的逻辑吗?为什么不使用同样有效的
(\[.*?\])
@EnochOu,而是像示例中那样使用否定字符类来防止不必要的回溯呢。
['[var1]', '[v/ar/2]', 'var3', 'var4']