Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中拆分数字递增的字符串_Python_Regex_Split - Fatal编程技术网

如何在python中拆分数字递增的字符串

如何在python中拆分数字递增的字符串,python,regex,split,Python,Regex,Split,我想用python将字符串按增加的数目拆分 例如,我有一个字符串 "1. aaa aaa aa. 2. bb bbbb bb. 3. cc cccc cc 4. ddd d dddd ... 99. z zzzz zzz" 我想从上面的字符串中得到以下列表 [aaa aaa aa, bb bbbb bb, cc cccc cc, ddd d dddd, ... z zzzz zzz] 我用下面的代码进行了尝试,但是我没有得到我想要的 InputString = "1. aaa aaa aa.

我想用python将字符串按增加的数目拆分

例如,我有一个字符串

"1. aaa aaa aa. 2. bb bbbb bb. 3. cc cccc cc 4. ddd d dddd ... 99. z zzzz zzz"
我想从上面的字符串中得到以下列表

[aaa aaa aa, bb bbbb bb, cc cccc cc, ddd d dddd, ... z zzzz zzz]
我用下面的代码进行了尝试,但是我没有得到我想要的

InputString = "1. aaa aaa aa. 2. bb bbbb bb. 3. cc cccc cc 4. ddd d dddd ... 99. z zzzz zzz"
OutputList = InputString.split("[1-99]. ")

您可以使用
re
模块

[0-9]+
匹配1到多个数字,
\。
匹配文本
字符

编辑:

您可以在正则表达式前面加上
(\。\s)?
以有条件地在每个字符列表的末尾查找前导句点

re.split(r'(\.\s)?[0-9]+\.', input)

此表达式也可能起作用:

测验
如果您希望探索/简化/修改该表达式,将在的右上面板中对其进行解释。在中,如果您愿意,可以查看它与一些示例输入的匹配情况

这是一个很好的答案,虽然问题中的示例似乎表明OP也希望过滤掉文本末尾的句点,但这似乎超出了要点。@Grismar我也要指出这一点,但这可能是问题中的一个拼写错误。你是对的,我一定错过了结尾的
!你应该考虑一下边境案件,你的要求有点不完整。数字不连续的解决方案是否可以接受?那么正则表达式就可以了。如果没有,您需要迭代自己,从整个字符串开始,将部分拆分到下一个数字的左侧,然后继续向右部分,直到再也找不到匹配项为止。如果您的示例是准确的,您还必须处理每个零件后的尾随时间段。
re.split(r'(\.\s)?[0-9]+\.', input)
import re

regex = r"(?<=[0-9]\.)\s*(.*?)(?=[0-9]{1,}\.|$)"
test_str = "1. aaa aaa aa. 2. bb bbbb bb. 3. cc cccc cc 4. ddd d dddd ... 99. z zzzz zzz"

print(re.findall(regex, test_str))
['aaa aaa aa. ', 'bb bbbb bb. ', 'cc cccc cc ', 'ddd d dddd ... ', 'z zzzz zzz']