如何根据具有不同前缀的其他字符串重命名字符串?

2024-09-29 22:30:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个google电子表格(我也有一个csv),在第一行存储了我想要使用的名称列(源),在第一列存储了我想要更改的名称(目标,从第2行开始)

#1 - Giorgi Margvelashvili,#1 - Mikheil Saakashvili,#1 - United National Movement,#10 - Levan Chachua,#10 - National Party of Radical Democrats of Georgia,#10 - People's Party,#11 - Akaki Asatiani,#11 - Giorgi Chikhladze,#11 - Our Country,#11 - Sportsman's Union,#12 - Future Georgia,#12 - Traditionalists - Our Georgia and Women's Party,#13 - Mamuka Melikishvili,#13 - Merab Kostava Society,#13 - Teimuraz Mzhavia,#14 - Freedom Party,#14 - Georgian Group,#14 - Labour Council of Georgia,#15 - Avtandil Margiani,#15 - Mikheil Saluashvili,#17 - Nestan Kirtadze,#17 - Sergo Javakhidze,#17 - Tamaz Bibiluri,#2 - Davit Bakradze,#2 - Georgian Dream,#2 - Levan Gachechiladze,#2 - United Opposition,#20 - Mamuka Chokhonelidze,#20 - Nugzar Avaliani,#22 - Kartlos Gharibashvili,#22 - Teimuraz Bobokhidze,#3 - Arkadi (Badri) Patarkatsishvili,#3 - Christian-Democratic Movement,#3 - Free Georgia,#3 - Freedom Party,#3 - Future Georgia,#3 - Georgian Group,#3 - Labour,#3 - Labour Council of Georgia,#3 - Merab Kostava Society,#3 - Movement for Fair Georgia,#3 - National Democratic Party of Georgia,#3 - New Rights,#3 - Nino Burjanadze,#3 - People's Party,#3 - Public Movement,#3 - Republican party,#3 - Sportsman's Union,#4 - Labour,#4 - Republican party,#4 - Shalva Natelashvili,#5 - Christian Democratic Alliance,#5 - Christian-Democratic Movement,#5 - Davit Gamkrelidze,#5 - Georgian Politics,#5 - Giorgi Targamadze,#5 - Labour,#5 - National Party of Radical Democrats of Georgia,#5 - New Rights,#5 - Our Country,#5 - Right Wing Alliance Topadze Industrialists,#5 - Sportsman's Union,#5 - Traditionalists - Our Georgia and Women's Party,#6 - Free Georgia,#6 - Giorgi (Gia) Maisashvili,#6 - Koba Davitashvili,#6 - Right Wing Alliance Topadze Industrialists,#7 - Giorgi Liluashvili,#7 - Irina Sarishvili-Chanturia,#7 - Movement for Fair Georgia,#7 - Sportsman's Union,#8 - Christian Democratic Alliance,#8 - National Democratic Party of Georgia,#8 - Zurab Kharatishvili,#9 - Georgian Politics,#9 - Nino Chanishvili,#9 - Public Movement
Giorgi Margvelashvili,Georgian Dream,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Mikheil Saakashvili,United National Movement,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
United National Movement,United National Movement,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Nino Chanishvili,Initiative Group,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

只要目标相似但仍有点不同(#number - sameNameAsTheTarget),如何基于另一个具有不同前缀的字符串重命名字符串

我在javascript中尝试过这一点(但是Python中的答案对我来说也不错),但是只有在源代码和目标完全相同的情况下,我们才能通过测试

基于Barmar的回答,我之所以这样做是因为google脚本可能对可以使用的库有一些限制:

/**
This function will rename the cells of the first columns if they have an elment of the first row 
@customFunction
*/
function RENAMECELL() {
  var app = SpreadsheetApp; 
  var activeSheet = app.getActiveSpreadsheet().getActiveSheet();
  for (var row = 2; row < 60; row++) {
    var name = activeSheet.getRange(row,1).getValue();
    console.log(name);
    for (var col = 1; col < 50; col++) {
      if (activeSheet.getRange(1,col).getValue().indexOf(name) !== -1) {
        activeSheet.getRange(row,1).setValue(activeSheet.getRange(1,col).getValue());
        break;
      }
    }
  }
}

多亏了布拉玛和艾伦·威尔斯。但我仍然有几行目标列没有更新:

#1 - Giorgi Margvelashvili,Georgian Dream
#1 - Mikheil Saakashvili,United National Movement
#1 - United National Movement,United National Movement
Nino Chanishvili,Initiative Group
#11 - Sportsman's Union,Sportsman's Union
#14 - Georgian Group,Georgian Group
#20 - Mamuka Chokhonelidze,Initiative Group
#17 - Sergo Javakhidze,Movement for a Fair Georgia
#12 - Traditionalists - Our Georgia and Women's Party,Traditionalists - Our Georgia and Women's Party
#11 - Our Country,Our Country
#11 - Giorgi Chikhladze,Initiative Group
#13 - Merab Kostava Society,Merab Kostava Society
#13 - Mamuka Melikishvili,Initiative Group
#3 - Public Movement,Public Movement
#15 - Avtandil Margiani,Initiative Group
#14 - Labour Council of Georgia,Labour Council of Georgia
#10 - People's Party,People's Party
#11 - Akaki Asatiani,Union of Georgian Traditionalists
#17 - Nestan Kirtadze,Initiative Group
#20 - Nugzar Avaliani,Initiative Group
#17 - Tamaz Bibiluri,Initiative Group
#2 - Davit Bakradze,United National Movement
#2 - Georgian Dream,Georgian Dream
#2 - Levan Gachechiladze,Initiative Group
#2 - United Opposition,United Opposition
#13 - Teimuraz Mzhavia,Christian Democratic People's Party
#15 - Mikheil Saluashvili,Initiative Group
#22 - Kartlos Gharibashvili,Initiative Group
#22 - Teimuraz Bobokhidze,Initiative Group
#3 - Arkadi (Badri) Patarkatsishvili,Initiative Group
#3 - Christian-Democratic Movement,Christian-Democratic Movement
#14 - Labour Council of Georgia,Labour
#3 - Nino Burjanadze,Democratic Movement – United Georgia
Christian Democratic Alliance,Christian Democratic Alliance
#3 - New Rights,New Rights
Shalva Natelashvili,Labour Party
Davit Gamkrelidze,New Right
Giorgi Targamadze,Christian-Democratic Movement
#10 - National Party of Radical Democrats of Georgia,National Party of Radical Democrats of Georgia
#3 - Republican party,Republican party
#3 - Free Georgia,Free Georgia
Georgian Politics,Georgian Politics
Giorgi (Gia) Maisashvili,Party of the Future
Koba Davitashvili,People's Party
#3 - Movement for Fair Georgia,Movement for Fair Georgia
Right Wing Alliance Topadze Industrialists,Right Wing Alliance Topadze Industrialists
Irina Sarishvili-Chanturia,Hope party
Zurab Kharatishvili,European Democrats
#12 - Future Georgia,Future Georgia
#10 - Levan Chachua,Initiative group    
#3 - National Democratic Party of Georgia,National Democratic Party of Georgia
#14 - Freedom Party,Freedom Party
Giorgi Liluashvili,Initiative group 

Tags: ofpartygroupourunitednationalalliancechristian
1条回答
网友
1楼 · 发布于 2024-09-29 22:30:59

在第一行的单元格上循环。然后在剩下的行上循环。使用.includes()测试该行第一个单元格中的名称是否在第一行单元格中的值中。如果是,则将其替换为第二个单元格中的值

for (int col = 1; col < 60; col++) {
    let name = activeSheet.getRange(1, col).getValue();
    for (int row = 2; row < 50; row++) {
        if (name.includes(activeSheet.getRange(row, 1).getValue())) {
            activeSheet.getRange(1, col).setValue(activeSheet.getRange(row, 2).getValue());
            break;
        }
    }
}

相关问题 更多 >

    热门问题