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
全体の話は音楽的なものです:私はリリーポンド形式の文字列(またはより良い、非常に単純なコア形式のサブセット、音符と長さだけ)を持っており、それらをPythonペアint(duration)、list(ofピッチ)に変換したいと思います文字列)。パフォーマンスは重要ではないので、それらを前後に変換したり、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]文字で構成できます。
- 文字列の後に0桁以上の数字が続きます:e bes g4 c16
- 文字列の後に0個以上の'または、(結合されていない)が続く:e' bes、f''' 2 g ,, 4
- 文字列は文字列のリストで置き換えることができます。リストリミッターは<>です。4番号は>の後ろにあり、スペースは使用できません。
PS 2
目標は、Lilypondパーサーを作成することではありません。それは本当に、追加機能やメモを挿入するための拡張機能のない非常に短いスニペットのためだけのものですか?これが機能しない場合は、ABCのような別の形式(簡略化)を選択します。したがって、Lilypond(「lilypondを介して実行し、Schemeで音楽データを提供し、それを解析する」)またはそのツールチェーンに関係するものは、確かにこの質問に対する答えではありません。パッケージもインストールされていません。