Python 3.x 找到一个后跟空格的数字并拆分字符串

Python 3.x 找到一个后跟空格的数字并拆分字符串,python-3.x,regex,string,split,Python 3.x,Regex,String,Split,我有一个python字符串: 1 test11-1-swi-2 2 test11-swi-3 3 26-ca-20-p-3 4 26-ca-20-p-4 5 test11-labdist-rtr-1 6 test11-labdist-rtr-2 7 pmac-fw 8 pmac-swi 9 pmac-server 10 test11-swi-2 11 test-2400-rtr-6 12 test-2400-rtr

我有一个python字符串:

 1 test11-1-swi-2    2 test11-swi-3      3 26-ca-20-p-3     4 26-ca-20-p-4    
 5 test11-labdist-rtr-1 6 test11-labdist-rtr-2 7 pmac-fw          8 pmac-swi        
 9 pmac-server      10 test11-swi-2 11 test-2400-rtr-6 12 test-2400-rtr-5
 13 27-4c-da-p-13   14 27-4c-da-p-14   15 test11-1500-rtr
我想把它分成x个字符串,在这个例子中是15个,但可能更多

我试过使用:

[s.strip用于t.split''中的s,如果s] 它占2个或更多空间,但某些子字符串之间仅相隔1个空间

能起作用的是

查找1

然后找到2

找到2后,创建从1到2之前的字符的子字符串

e、 g

1测试11-1-swi-2

2测试11-swi-3

3 26-ca-20-p-3

4 26-ca-20-p-4

5测试11-labdist-rtr-1

6测试11-labdist-rtr-2

7 pmac fw

8 pmac swi

9 pmac服务器

10测试11-2400-swi-2

11测试-2400-rtr-6

12测试-2400-rtr-5

13 27-4c-da-p-13

14 27-4c-da-p-14


15 test11-1500-rtr

您可以使用re.split并匹配2个或更多的空白字符

import re
from pprint import pprint

t = (" 1 test11-1-swi-2    2 test11-swi-3      3 26-ca-20-p-3     4 26-ca-20-p-4    \n"
            " 5 test11-labdist-rtr-1 6 test11-labdist-rtr-2 7 pmac-fw          8 pmac-swi        \n"
            " 9 pmac-server      10 test11-swi-2 11 test-2400-rtr-6 12 test-2400-rtr-5\n"
            " 13 27-4c-da-p-13   14 27-4c-da-p-14   15 test11-1500-rtr")

res = [s.strip() for s in re.split(r"\s{2,}", t) if s]
pprint(res)
输出

['1 test11-1-swi-2',
 '2 test11-swi-3',
 '3 26-ca-20-p-3',
 '4 26-ca-20-p-4',
 '5 test11-labdist-rtr-1 6 test11-labdist-rtr-2 7 pmac-fw',
 '8 pmac-swi',
 '9 pmac-server',
 '10 test11-swi-2 11 test-2400-rtr-6 12 test-2400-rtr-5',
 '13 27-4c-da-p-13',
 '14 27-4c-da-p-14',
 '15 test11-1500-rtr']

您可以使用re.split并匹配2个或更多的空白字符

import re
from pprint import pprint

t = (" 1 test11-1-swi-2    2 test11-swi-3      3 26-ca-20-p-3     4 26-ca-20-p-4    \n"
            " 5 test11-labdist-rtr-1 6 test11-labdist-rtr-2 7 pmac-fw          8 pmac-swi        \n"
            " 9 pmac-server      10 test11-swi-2 11 test-2400-rtr-6 12 test-2400-rtr-5\n"
            " 13 27-4c-da-p-13   14 27-4c-da-p-14   15 test11-1500-rtr")

res = [s.strip() for s in re.split(r"\s{2,}", t) if s]
pprint(res)
输出

['1 test11-1-swi-2',
 '2 test11-swi-3',
 '3 26-ca-20-p-3',
 '4 26-ca-20-p-4',
 '5 test11-labdist-rtr-1 6 test11-labdist-rtr-2 7 pmac-fw',
 '8 pmac-swi',
 '9 pmac-server',
 '10 test11-swi-2 11 test-2400-rtr-6 12 test-2400-rtr-5',
 '13 27-4c-da-p-13',
 '14 27-4c-da-p-14',
 '15 test11-1500-rtr']
我提出了一个重新拆分使用:

请看一篇在线文章

我提出了一个重新拆分使用:

请看一篇在线文章

为了简单起见,请使用re.findall:

import re
re.findall(r'\d+\s+.*?(?=\s|$)', s)
输出:

['1 test11-1-swi-2',
'2 test11-swi-3',
'3 26-ca-20-p-3',
'4 26-ca-20-p-4',
'5 test11-labdist-rtr-1',
'6 test11-labdist-rtr-2',
'7 pmac-fw',
'8 pmac-swi',
'9 pmac-server',
'10 test11-swi-2',
'11 test-2400-rtr-6',
'12 test-2400-rtr-5',
'13 27-4c-da-p-13',
'14 27-4c-da-p-14',
'15 test11-1500-rtr']
此正则表达式的简单含义是:

查找一个或多个数字\d+ 然后用空格分隔一个或多个\s+ 然后是任何字符串。*?懒散地 然后是空格还是字符串结尾?=\s|$ 为了简单起见,请使用re.findall:

import re
re.findall(r'\d+\s+.*?(?=\s|$)', s)
输出:

['1 test11-1-swi-2',
'2 test11-swi-3',
'3 26-ca-20-p-3',
'4 26-ca-20-p-4',
'5 test11-labdist-rtr-1',
'6 test11-labdist-rtr-2',
'7 pmac-fw',
'8 pmac-swi',
'9 pmac-server',
'10 test11-swi-2',
'11 test-2400-rtr-6',
'12 test-2400-rtr-5',
'13 27-4c-da-p-13',
'14 27-4c-da-p-14',
'15 test11-1500-rtr']
此正则表达式的简单含义是:

查找一个或多个数字\d+ 然后用空格分隔一个或多个\s+ 然后是任何字符串。*?懒散地 然后是空格还是字符串结尾?=\s|$
您可以使用\d+\s+[^\s]*获取所有子字符串,而不是拆分它

\d+:一个或多个数字字符 \s+:一个或多个倍空格字符 [^\s]*:任何非空白字符的零倍或更多倍。 演示:

输出:

['1 test11-1-swi-2',
'2 test11-swi-3',
'3 26-ca-20-p-3',
'4 26-ca-20-p-4',
'5 test11-labdist-rtr-1',
'6 test11-labdist-rtr-2',
'7 pmac-fw',
'8 pmac-swi',
'9 pmac-server',
'10 test11-swi-2',
'11 test-2400-rtr-6',
'12 test-2400-rtr-5',
'13 27-4c-da-p-13',
'14 27-4c-da-p-14',
'15 test11-1500-rtr']

您可以使用\d+\s+[^\s]*获取所有子字符串,而不是拆分它

\d+:一个或多个数字字符 \s+:一个或多个倍空格字符 [^\s]*:任何非空白字符的零倍或更多倍。 演示:

输出:

['1 test11-1-swi-2',
'2 test11-swi-3',
'3 26-ca-20-p-3',
'4 26-ca-20-p-4',
'5 test11-labdist-rtr-1',
'6 test11-labdist-rtr-2',
'7 pmac-fw',
'8 pmac-swi',
'9 pmac-server',
'10 test11-swi-2',
'11 test-2400-rtr-6',
'12 test-2400-rtr-5',
'13 27-4c-da-p-13',
'14 27-4c-da-p-14',
'15 test11-1500-rtr']

这是有用的。非常感谢。这是有用的。非常感谢。