我在Python(3)中使用re模块,并希望替换(re.sub公司(regex,replace,string))以下格式的字符串
"foo <bar e word> f ga <foo b>"
到
^{pr2}$甚至是
^{3}$但我无法将单个单词与<;…>;构造中的单词边界隔离开来。在
帮忙会很好的!在
第1页
整个故事是一个音乐故事: 我有Lilypond格式的字符串(或者更好,是非常简单的核心格式的一个子集,只有注释和持续时间),并希望将它们转换为python pairs int(持续时间)和list(音高字符串)。性能并不重要,所以我可以来回转换它们,用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''"]),
]
基本格式是字符串+数字,如:e4bes16
第2页
我们的目标不是创建Lilypond解析器。它真的只是很短的片段,没有附加的功能,没有插入注释的扩展。如果这不起作用,我会去另一种格式(简化)如ABC。因此,任何与Lilypond有关的东西(“通过Lilypond运行它,让它在Scheme中给出音乐数据,解析它”)或其工具链肯定不是这个问题的答案。软件包甚至没有安装。在
我知道您不是在寻找通用解析器,但是pyparsing使这个过程非常简单。您的格式看起来非常类似于我作为最早pyparsing示例之一编写的chemical formula parser。在
以下是使用pyparsing实现的问题:
有了这个输出:
^{pr2}$你的第一个问题可以这样回答:
我添加了
lstrip()
以删除此模式结果之前出现的单个空格。如果您想使用第一个选项,只需将#<
替换为<
。在您的第二个问题可以用下面的方式解决,尽管您可能需要考虑一个列表中的
^{pr2}$,
,比如['g,', "b'"]
。字符串中的逗号是否应该在那里?也许有更快的方法。以下只是概念的证明。列表理解可能会取代最后一个元素,尽管这会非常复杂。在相关问题 更多 >
编程相关推荐