我有一个列表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']
问题:
- 我需要如何更改正则表达式才能说明其中包含
-
的名称(请参阅'David-Christian Eckardt, SPD'
- 我需要如何更改代码才能保留原始元素
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.split
与maxsplit=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",
]