首页 > 解决方案 > 在python中更改字符串的特定部分

问题描述

我有一个表格,其中有一列如下。“顶部:xx,xx”部分是产品的价格,我想将逗号更改为点。Top:26,70应该是因为在同一行中可能有多个场合,并且行没有模式,我Top:26.70 无法拆分字符串。

Product
Etli Barbekü Brioche® Menü(Mktr:1,Id:20046,Top:26,70)\r\n
Whopper® Menü(Mktr:1,Id:10001,Top:26,25)\r\n,Whopper® Menü(Mktr:1,Id:10001,Top:22,5)\r\n
Köfteburger® Menü(Mktr:1,Id:10030,Top:16,95)\r\n,Köfteburger® Menü(Mktr:1,Id:10030,Top:16,95)\r\n,İndirimli Vodafone Menüsü (WhopperJr.Menü&Tavukburger)(Mktr:1,Id:98196,Top:19,9)\r\n,İndirimli Vodafone Menüsü (WhopperJr.Menü&Tavukburger)(Mktr:1,Id:98196,Top:19,9)\r\n,Big Royale Kampanyası(Mktr:1,Id:98449,Top:32,9)\r\n,Köfteburger® Menü(Mktr:1,Id:10030,Top:18,95)\r\n,Double Köfteburger® Menü(Mktr:1,Id:20042,Top:21,95)\r\n,Double Köfteburger® Menü(Mktr:1,Id:20042,Top:21,95)\r\n,Kral İkili(Mktr:1,Id:98176,Top:28,9
(Mktr:1,Id:98584,Top:17,75)\r\n,(Mktr:1,Id:98584,Top:17,75)\r\n,(Mktr:1,Id:98584,Top:17,75)\r\n,(Mktr:1,Id:99595,Top:4,5)\r\n
(Mktr:1,Id:99009,Top:28,95)\r\n,(Mktr:1,Id:99065,Top:10,75)\r\n
YENI BIG KING MENU(Mktr:1,Id:20026,Top:20,70)\r\n
(Mktr:1,Id:99928,Top:32,45)\r\n
(Mktr:1,Id:98584,Top:14,75)\r\n,(Mktr:1,Id:98584,Top:14,75)\r\n,(Mktr:1,Id:98584,Top:14,75)\r\n,(Mktr:1,Id:98584,Top:14,75)\r\n,(Mktr:1,Id:98584,Top:14,75)\r\n
(Mktr:1,Id:115000,Top:0,01)\r\n,Whopper Cheese Menü(Mktr:1,Id:20001,Top:22,5)\r\n,(Mktr:1,Id:98584,Top:18,25)\r\n,(Mktr:1,Id:98535,Top:4,5)\r\n,Ranch Sos(Mktr:1,Id:90008,Top:0,75)\r\n

标签: pythonstringreplace

解决方案


我希望这可以帮助

import re

s = '''Product
Etli Barbekü Brioche® Menü(Mktr:1,Id:20046,Top:26,70)\r\n
Whopper® Menü(Mktr:1,Id:10001,Top:26,25)\r\n,Whopper® Menü(Mktr:1,Id:10001,Top:22,5)\r\n
Köfteburger® Menü(Mktr:1,Id:10030,Top:16,95)\r\n,Köfteburger® Menü(Mktr:1,Id:10030,Top:16,95)\r\n,İndirimli Vodafone Menüsü (WhopperJr.Menü&Tavukburger)(Mktr:1,Id:98196,Top:19,9)\r\n,İndirimli Vodafone Menüsü (WhopperJr.Menü&Tavukburger)(Mktr:1,Id:98196,Top:19,9)\r\n,Big Royale Kampanyası(Mktr:1,Id:98449,Top:32,9)\r\n,Köfteburger® Menü(Mktr:1,Id:10030,Top:18,95)\r\n,Double Köfteburger® Menü(Mktr:1,Id:20042,Top:21,95)\r\n,Double Köfteburger® Menü(Mktr:1,Id:20042,Top:21,95)\r\n,Kral İkili(Mktr:1,Id:98176,Top:28,9
(Mktr:1,Id:98584,Top:17,75)\r\n,(Mktr:1,Id:98584,Top:17,75)\r\n,(Mktr:1,Id:98584,Top:17,75)\r\n,(Mktr:1,Id:99595,Top:4,5)\r\n
(Mktr:1,Id:99009,Top:28,95)\r\n,(Mktr:1,Id:99065,Top:10,75)\r\n
YENI BIG KING MENU(Mktr:1,Id:20026,Top:20,70)\r\n
(Mktr:1,Id:99928,Top:32,45)\r\n
(Mktr:1,Id:98584,Top:14,75)\r\n,(Mktr:1,Id:98584,Top:14,75)\r\n,(Mktr:1,Id:98584,Top:14,75)\r\n,(Mktr:1,Id:98584,Top:14,75)\r\n,(Mktr:1,Id:98584,Top:14,75)\r\n
(Mktr:1,Id:115000,Top:0,01)\r\n,Whopper Cheese Menü(Mktr:1,Id:20001,Top:22,5)\r\n,(Mktr:1,Id:98584,Top:18,25)\r\n,(Mktr:1,Id:98535,Top:4,5)\r\n,Ranch Sos(Mktr:1,Id:90008,Top:0,75)\r\n'''

regex = re.compile(r'Top:(\d+)(,)(\d+)')

out = []
for st in s.splitlines():
    if regex.search(st):
        out.append(regex.sub(r'Top:\1.\3', st))
    else:
        out.append(st)

print('\r\n'.join(out))

其中的输出应该是这样的

Product
Etli Barbekü Brioche® Menü(Mktr:1,Id:20046,Top:26.70)

Whopper® Menü(Mktr:1,Id:10001,Top:26.25)
,Whopper® Menü(Mktr:1,Id:10001,Top:22.5)

Köfteburger® Menü(Mktr:1,Id:10030,Top:16.95)
,Köfteburger® Menü(Mktr:1,Id:10030,Top:16.95)
,İndirimli Vodafone Menüsü (WhopperJr.Menü&Tavukburger)(Mktr:1,Id:98196,Top:19.9)
,İndirimli Vodafone Menüsü (WhopperJr.Menü&Tavukburger)(Mktr:1,Id:98196,Top:19.9)
,Big Royale Kampanyası(Mktr:1,Id:98449,Top:32.9)
,Köfteburger® Menü(Mktr:1,Id:10030,Top:18.95)
,Double Köfteburger® Menü(Mktr:1,Id:20042,Top:21.95)
,Double Köfteburger® Menü(Mktr:1,Id:20042,Top:21.95)
,Kral İkili(Mktr:1,Id:98176,Top:28.9
(Mktr:1,Id:98584,Top:17.75)
,(Mktr:1,Id:98584,Top:17.75)
,(Mktr:1,Id:98584,Top:17.75)
,(Mktr:1,Id:99595,Top:4.5)

(Mktr:1,Id:99009,Top:28.95)
,(Mktr:1,Id:99065,Top:10.75)

YENI BIG KING MENU(Mktr:1,Id:20026,Top:20.70)

(Mktr:1,Id:99928,Top:32.45)

(Mktr:1,Id:98584,Top:14.75)
,(Mktr:1,Id:98584,Top:14.75)
,(Mktr:1,Id:98584,Top:14.75)
,(Mktr:1,Id:98584,Top:14.75)
,(Mktr:1,Id:98584,Top:14.75)

(Mktr:1,Id:115000,Top:0.01)
,Whopper Cheese Menü(Mktr:1,Id:20001,Top:22.5)
,(Mktr:1,Id:98584,Top:18.25)
,(Mktr:1,Id:98535,Top:4.5)
,Ranch Sos(Mktr:1,Id:90008,Top:0.75)

推荐阅读