Python 3.x 找到一个后跟空格的数字并拆分字符串
我有一个python字符串: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
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']
这是有用的。非常感谢。这是有用的。非常感谢。