分割字符串但保留定界符

时间:2018-07-15 18:34:29

标签: python regex

我正在尝试标记一些代码,并希望在分割字符串时保留定界符。

例如,我想保留.();~的任何出现。

我一直在使用re.split:

line = 'Keyboard.keyPressed();'
re.split(r'([\.\(\)\;\~])', line)

但是,我当前的re.split实现当前在数组中创建了一些不必要的空字符串:

['Keyboard', '.', 'keyPressed', '(', '', ')', '', ';', '']

如何解决此问题以排除空字符串?

2 个答案:

答案 0 :(得分:1)

为清楚起见,请保持拆分简单,只需删除空字符串即可。

import re
line = 'Keyboard.keyPressed();'
split = re.split(r'([\.\(\)\;\~])', line)

cleared = list(filter(None, split))   # <- Add this line

print(cleared)

<script type="text/javascript" src="//cdn.datacamp.com/dcl-react.js.gz"></script>

<div data-datacamp-exercise data-lang="python">
  <code data-type="sample-code">
import re
line = 'Keyboard.keyPressed();'
split = re.split(r'([\.\(\)\;\~])', line)
cleared = list(filter(None, split))
print(cleared)
  </code>
</div>

请参阅:how to remove elements from a list

答案 1 :(得分:0)

您可以使用

re.findall(r'[^.();~]+|[.();~]', line)

请参见regex demo

re.findall将返回输入字符串中所有匹配的不重叠子字符串的列表,与以下内容匹配:

  • [^.();~]+-+.()和{ {1}}
  • ;-或
  • ~-一次出现|[.();~].()

请参见Python demo online

;