我有一些像这样的字符串
' 12 2 89 29 11 92 92 10'
(所有数字都是正整数,所以没有-
而没有.
),我想从中提取所有数字,编辑一些数字,然后将它们全部放在一起相同的空白。例如,如果我将数字11
更改为22
,我希望最终字符串为
' 12 2 89 29 22 92 92 10'
我做了一些搜索,大多数问题忽略了空白,只关心数字。我试过了
match = re.match((\s*(\d+)){8}, str)
但match.group(0)
为我提供了整个字符串,match.group(1)
为我提供了第一个匹配\ 12
(我添加了\
,否则网站将不会显示前导空格),match.group(2)
给了我12
。但是之后它不会给我任何数字,任何高于2
的索引都会给我一个错误。我不认为我的方法是正确的,正确的做法是什么?
我刚试过re.split('(\d+)', str)
,这似乎就是我需要的。
答案 0 :(得分:1)
我建议使用non-capturing groups的正则表达式来获取“空格”列表。零件和编号'部分:
In [15]: text = ' 12 2 89 29 11 92 92 10'
In [16]: parts = re.findall('((?: +)|(?:[0-9]+))', text)
In [17]: parts
Out[17]: [' ', '12', ' ', '2', ' ', '89', ' ', '29', ' ',
'11', ' ', '92', ' ', '92', ' ', '10']
然后你可以这样做:
for index, part in enumerate(parts):
if part == '11':
parts[index] = '22'
replaced = ''.join(parts)
(或者你想做的任何匹配和替换)。
答案 1 :(得分:0)
将所有数字与空格匹配,更改所需数字并加入数组。
import re
newNum = '125'
text = ' 12 2 89 29 11 92 92 10'
^^
marray = re.findall(r'\s+\d+', text)
marray[6] = re.sub(r'\d+', newNum, marray[6])
print(marray)
[' 12', ' 2', ' 89', ' 29', ' 11', ' 92', ' 125', ' 10']