3 回答

TA貢獻1777條經驗 獲得超3個贊
您會得到該結果,因為該模式,([0-9]),
匹配逗號、單個數字、逗號。在此字符串中(您還添加了逗號),0,1,2,3,4,5,6,7,8,
,它只能匹配,0,
,然后,2,
等等......
要使用單個前導空格填充單個數字,您可以簡化腳本,省略使用條帶和附加逗號,并使用正向前瞻模式代替。
注意使用量詞{1}
可以省略。
,([0-9])(?=,)
例如
import re
s = '0,1,2,3,4,5,6,7,8,9,28,29,30,31,32,33,34,35'
regex = r',([0-9])(?=,)'
s = re.sub(regex, r', \1', s)
print(s)
輸出
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,28,29,30,31,32,33,34,35
如果您還想支持僅填充單個數字,則可以在末尾匹配逗號或斷言字符串結尾處更新正向前瞻:
,([0-9])(?=,|$)
正則表達式演示
編輯
由于您還想附加和前置逗號并填充第一個數字,因此您可以將模式更新為(?:,|^)([0-9])(?=,|$)
import re
s = '0,1,2,3,4,5,6,7,8,9,28,29,30,31,32,33,34,35'
s = ',' + s + ','
s = re.sub(r'(?:,|^)([0-9])(?=,|$)', r', \1', s)
s = s.strip(',')
print(s)
輸出
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,28,29,30,31,32,33,34,35

TA貢獻1850條經驗 獲得超11個贊
這就是我結束的地方,合并了The fourth bird的正則表達式:
s = '0,1,2,3,4,5,6,7,8,9,28,29,30,31,32,33,34,35,7'
print(s)
s = ',' + s + ','
regex = r',([0-9])(?=,|$)'
s = re.sub(regex, r', \1', s)
s = s.strip(',')
print(s)
...根據需要在下面給出輸入字符串和輸出字符串:
0,1,2,3,4,5,6,7,8,9,28,29,30,31,32,33,34,35,7
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,28,29,30,31,32,33,34,35, 7
這對我有用......感謝所有回復者!

TA貢獻1890條經驗 獲得超9個贊
我相信您可以使用以下正則表達式來實現您想要做的事情:
r'(?<!\d)(\d)(?=,|$)'
負片看后面,不是一個數字:(?<!\d)
匹配組任何數字:(\d)
正向向前看逗號或行尾:(?=,|$)
https://regex101.com/r/UQtqHK/1
import re
s = '0,1,2,3,4,5,6,7,8,9,28,29,30,31,32,33,34,5'
print(s)
s = re.sub(r'(?<!\d)(\d)(?=,|$)', r' \1', s)
print(s)
那就是說你可能會更好地使用str.format()
https://docs.python.org/3.7/library/string.html#format-string-syntax
row_one = "1,2,3,4,5,6,7,8,9,10,11,12,13"
row_two = "1,2,3,4,9,10,11,12,13,5,6,7,8"
row_one_array = row_one.split(',')
row_two_array = row_two.split(',')
print(",".join(["{:>2}".format(x) for x in row_one_array]))
print(",".join(["{:>2}".format(x) for x in row_two_array]))
神奇的一點是:{:>2}
:= 開始學期(不知道這叫什么)
>= 右對齊
2= 字符寬度
添加回答
舉報