我在 Python(3) 中使用 re 模块并希望用以下格式替换 (re.sub(regex, replace, string)) 字符串
"foo <bar e word> f ga <foo b>"
至
"#foo <bar e word> #f #ga <foo b>"
甚至
"#foo #<bar e word> #f #ga #<foo b>"
但是我无法将单个单词与 <...> 构造中的单词边界隔离开来。
帮助会很好!
PS 1
整个故事是一个音乐故事:我有 Lilypond 格式的字符串(或者更好的是,非常简单的核心格式的子集,只有音符和持续时间),并希望将它们转换为 python 对 int(duration),list(of pitch字符串)。性能并不重要,所以我可以来回转换它们,使用 python 列表迭代,拆分字符串并再次加入它们等。但是对于上述问题,我没有找到答案。
源字符串
"c'4 d8 < e' g' >16 fis'4 a,, <g, b'> c''1"
应该导致
[
(4, ["c'"]),
(8, ["d"]),
(16, ["e'", "g'"]),
(4, ["fis'"]),
(0, ["a,,"]),
(0, ["g", "b'"]),
(1, ["c''"]),
]
基本格式是字符串+数字,如下所示:e4 bes16
- 项目清单
- 字符串可以包含多个,至少一个,[a-zA-Z] 字符
- 字符串后跟零个或多个数字:e bes g4 c16
- 字符串后跟零个或多个 ' 或 ,(不合并):e' bes, f'''2 g,,4
- 字符串可以用字符串列表代替,列表限制符是 <>: 4 数字在 > 后面,不允许有空格
PS 2
目标不是创建 Lilypond 解析器。它真的只是非常短的片段,没有额外的功能,没有插入注释的扩展。如果这不起作用,我会选择另一种格式(简化),如 ABC。所以任何与 Lilypond 相关的事情(“通过 lilypond 运行它,让它在 Scheme 中给出音乐数据,解析它”)或其工具链肯定不是这个问题的答案。该软件包甚至没有安装。