【发布时间】:2021-06-21 13:41:36
【问题描述】:
我有一个字符串列表,其中包含用拉丁数字表示的和弦,如下所示:
['ii7', 'vi7', 'V', 'IVadd9', 'Iadd9', 'V', 'IVmaj7', 'ii7', 'vi7', 'V', 'IVadd9', 'Iadd9', 'V', 'IVmaj7']
我想将这些字符串分成 3 个子列表,如下所示:
numerals = ['ii', 'vi', 'V', 'IV', 'I', 'V', 'IV', 'ii', 'vi', 'V', 'IV', 'I', 'V', 'IV']
chord_type=['min', 'min', 'maj', 'maj', 'maj', 'maj','maj', 'min', 'min', 'maj', 'maj', 'maj', 'maj','maj']
extentions=['7','7','', 'add9','add9','','7','7','7','','add9','add9','','7']
(如您所见,大写罗马数字对应和弦类型中的“maj”,非大写字母对应“min”。)
在我的例子中所有可能的罗马数字:
i, ii, iii, iv, v, vi, vii, I, II, III, IV, V, VI, VII
请注意,我们不需要 M、C、L、X。
我知道我可以在 Python 中从字符串中的字母中提取或拆分数字,如 here 所述,但是如何提取罗马数字?
我考虑过使用类似 match 正则表达式的东西,但我对如何定义这 7 个罗马数字感到困惑,因为这些字符可能会再次出现在字符串中。
【问题讨论】:
-
你已经添加了
python标签,但是你没有为你的问题添加代码。 -
您是否尝试过使用匹配罗马数字的正则表达式而不是
\d+? (请注意,您不需要匹配所有可能的罗马数字,只需匹配从 1 到 7 的那些) -
您应该首先获取所有
numerals的列表,也许只是小写。你好像少了一些。您需要i..vii来获得音阶的七个音符。 -
你能列举所有可能的 a) 数字、b) chord_types 和 c) 扩展吗?
-
分享你的代码,到目前为止你做了什么?
标签: python string split roman-numerals