【发布时间】:2020-01-09 15:47:21
【问题描述】:
我一直在努力解决非常具有挑战性的字符串。
例如,
str1 = '95% for Pikachu, 92% for Sandshrew'
str2 = '70% for Paras & 100% Arcanine'
str3 = '99% Diglett, 40% Dugtrio'
str4 = '10% Squirtle, 100% for Alakazam'
str5 = '30% Metopod & 99% Dewgong'
字符串以%整数开头,可能有for,然后是口袋妖怪的名字。可能有comma(,) 或& 符号,然后是新的% 整数。终于有了pokemon的另一个名字。(全部以大写字母开头)
我要提取两个pokemon,比如result,
['Pikachu', 'Sandshrew']
['Paras', 'Arcanine']
['Diglett', 'Dugtrio']
['Squirtle', 'Alakazam']
['Metopod', 'Dewgong']
然后我可以使用in 语法创建所有 pokemen 的列表,但这不是最好的方法(以防他们添加更多 pokemon)。是否可以使用正则表达式进行提取?
提前致谢!
编辑
根据要求,我正在添加我的代码,
str_list = [str1, str2, str3, str4, str5]
for x in str_list:
temp_list = []
if 'for' in x:
temp = x.split('% for', 1)[1].strip()
temp_list.append(temp)
else:
temp = x.split(" ", 1)[1]
temp_list.append(temp)
print(temp_list)
我知道这不是正则表达式。我试过的表达是,\d+
提取整数开始...但不知道如何开始。
EDIT2
@b_c 有很好的边缘情况,所以我在这里添加它
edge_str = '100% for Pikachu, 29% Pika Pika Pikachu'
结果
['Pikachu', 'Pika Pika Pikachu']
【问题讨论】:
-
请发布您尝试解决此问题的代码。
-
您的正则表达式是否需要支持
Mr. Mime、Mime Jr.、Porygon2或Type: Null? (其他不熟悉的口袋妖怪名称)