我正在尝试使用以下代码将字符串剪切成碎片:
re.split("[A-Z][a-z]?[0-9]*","CO2")
我希望得到一些结果:
["C","O2"]
然而我得到了:
['','','']
答案 0 :(得分:1)
由于您的re中没有捕获组,因此拆分的内容不属于结果。你得到的是在' C'之前的空字符串,' C'之间的空字符串。和' O2'和' O2'之后的空字符串。
如果您使用
re.split("([A-Z][a-z]?[0-9]*)","CO2")
你会得到
['', 'C', '', 'O2', '']
一种肮脏的方法是使用
filter(None, re.split("([A-Z][a-z]?[0-9]*)","CO2"))
删除不真实的元素(在本例中为空字符串)。
答案 1 :(得分:1)
如果要拆分
使用这样的环境:
(?<=[A-Z\d])(?=[A-Z])
<强>否则强>
简单匹配(不分割):
[A-Z][a-z]?\d*
希望它有所帮助。
答案 2 :(得分:0)
你也可以使用这个:
>>> import re
>>> x = re.findall(r"^([A-Z][a-z]?)([A-Z][0-9]*)$","CO2")
>>> list(x[0])
['C', 'O2']