替换列表中元素的子字符串并保留原始元素



我有一个列表names

names = ['Dr. Augsten, BÜNDNIS 90/DIE GRÜNEN', 'Dirk Adams, GRÜNE', 'Blechschmidt, DIE LINKE', 'Steffen Harzer, LINKE', 'Gerd Schuchardt, Minister für Wissenschaft, Forschung und Kultur', 'David-Christian Eckardt, SPD', 'Christine Ursula Klaus, SPD', 'Klaus von der Krone, CDU', 'Antje Ehrlich-Strathausen, SPD', 'Benno Lemke, PDS']

names = [re.sub('(?<!DIE)sLINKE', ' DIE LINKE', line) for line in names]
names = [re.sub('(?<!DIE)sGRÜNE', ' BÜNDNIS 90/DIE GRÜNEN', line) for line in names]
names = [re.sub('Die Linke', 'DIE LINKE', line) for line in names]
names = [re.sub('PDS', 'DIE LINKE', line) for line in names]
names = [re.sub('Dr.s', '', line) for line in names]
actual_names = [re.sub('((?:^|(?:[.!?]s))(w+)s)', '', line) for line in names]
print(actual_names)

actual_names = ['Augsten, BÜNDNIS 90/DIE GRÜNEN', 'Adams, BÜNDNIS 90/DIE GRÜNEN', 'Blechschmidt, DIE LINKE', 'Harzer, DIE LINKE', 'Schuchardt, Minister für Wissenschaft, Forschung und Kultur', 'David-Christian Eckardt, SPD', 'Ursula Klaus, SPD', 'von der Krone, CDU', 'Ehrlich-Strathausen, SPD', 'Lemke, DIE LINKE']

问题:

  1. 我需要如何更改正则表达式才能说明其中包含-的名称(请参阅'David-Christian Eckardt, SPD'
  2. 我需要如何更改代码才能保留原始元素

desired_names = ['Augsten, BÜNDNIS 90/DIE GRÜNEN', 'Adams, BÜNDNIS 90/DIE GRÜNEN', 'Adams, GRÜNE', 'Blechschmidt, DIE LINKE', 'Harzer, DIE LINKE', 'Harzer, LINKE', 'Schuchardt, Minister für Wissenschaft, Forschung und Kultur', 'Eckardt, SPD', 'Klaus, SPD', 'von der Krone, CDU', 'Ehrlich-Strathausen, SPD', 'Lemke, PDS', 'Lemke, DIE LINKE']

列表中的订单无关紧要

在这种情况下regex是必要的吗?您可以将str.splitmaxsplit=1参数一起使用:

names = [
"Dr. Augsten, BÜNDNIS 90/DIE GRÜNEN",
"Dirk Adams, GRÜNE",
"Blechschmidt, DIE LINKE",
"Steffen Harzer, LINKE",
"Gerd Schuchardt, Minister für Wissenschaft, Forschung und Kultur",
"David-Christian Eckardt, SPD",
"Christine Ursula Klaus, SPD",
"Klaus von der Krone, CDU",
"Antje Ehrlich-Strathausen, SPD",
"Benno Lemke, PDS",
]
m = {"LINKE": "DIE LINKE", "GRÜNE": "BÜNDNIS 90/DIE GRÜNEN", "PDS": "DIE LINKE"}
out = [n.split(", ", maxsplit=1) for n in names]
out = [", ".join([a.split()[-1], m.get(b, b)]) for a, b in out]
print(out)

打印:

[
"Augsten, BÜNDNIS 90/DIE GRÜNEN",
"Adams, BÜNDNIS 90/DIE GRÜNEN",
"Blechschmidt, DIE LINKE",
"Harzer, DIE LINKE",
"Schuchardt, Minister für Wissenschaft, Forschung und Kultur",
"Eckardt, SPD",
"Klaus, SPD",
"Krone, CDU",
"Ehrlich-Strathausen, SPD",
"Lemke, DIE LINKE",
]

相关内容

  • 没有找到相关文章

最新更新