python - 按字母分割Python字符串并保留分隔符

标签 python regex

使用正则表达式,如何分割字符串并将其分隔符保留在返回的结果中?我试图将包含数字和字符串的字符串分割为一组字母,后跟任何数值,包括“.”。但它似乎无法正常工作。

下面是我的测试字符串,我使用 python 2.7,它没有产生 id 期望的结果。

s = 'M160.394,83.962L121.5,52L86.31,73.378L58,104.917L89.75,C136.667L158.542,136.667L185,110.208L160.394,83.962Z'
parts = filter(None, re.split('([MLHVCSQTAZ][^MLHVCSQTAZ]+)', s, re.IGNORECASE))
print len(parts), parts
>>> 3 ['M160.394,83.962', 'L121.5,52', 'L86.31,73.378L58,104.917L89.75,C136.667L158.542,136.667L185,110.208L160.394,83.962Z']

我希望它能给我这个

>>> 10 ['M160.394,83.962', 'L121.5,52', 'L86.31,73.378', 'L58,104.917', 'L89.75,', 'C136.667', 'L158.542,136.667', 'L185,110.208', 'L160.394,83.962', 'Z']

它应该输出一个字符串列表,其中每个字符串都以字母开头,在原始正则表达式 MLHVCSQTAZ

中找到

最佳答案

在您的代码中,您将 re.IGNORECASE 作为第三个参数传递给 re.split3rd argument of re.split is maxsplit not flags.

re.IGNORECASE 等于 2,因此您的输入仅拆分两次。

您可以使用:

>>> list(filter(None, re.split(r'([MLHVCSQTAZ][^MLHVCSQTAZ]+)', s, 0, re.I)))
['M160.394,83.962', 'L121.5,52', 'L86.31,73.378', 'L58,104.917', 'L89.75,', 'C136.667', 'L158.542,136.667', 'L185,110.208', 'L160.394,83.962', 'Z']

或者使用内联模式忽略大小写:

re.split(r'(?i)([MLHVCSQTAZ][^MLHVCSQTAZ]+)', s)
<小时/>

我建议使用这个简单的 re.findall 代码,它使用几乎相同的正则表达式:

parts = re.findall('(?i)[MLHVCSQTAZ][^MLHVCSQTAZ]*', s)

引用: lib/python2.7/sre_constants.py 中的SRE_FLAG_IGNORECASE = 2(感谢@vks的评论)

关于python - 按字母分割Python字符串并保留分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58699089/

相关文章:

python - 如何在 html 页面中添加 flask 自动索引

python - @classmethod 的使用如何导致输出差异?

python - 如何导入模块但忽略包的 __init__.py?

c# - 需要正则表达式来关闭或替换引号

regex - 我的 VIM 正则表达式搜索和替换一些代码有什么问题?

c# - 如果字符串没有超过一个句点,则匹配正则表达式。匹配非完全限定的 URL 路径

c# - 将字符串中 '=' 的所有实例替换为 '=='

python - 以与使用元组相同的方式使用 ndarray 进行索引

python - 使用 Bottle 的 AJAX 提交表单(Python)

regex - 在逗号后添加缺失的空格