
このテキストがあります。
{bc}having or marked by great {a_link|volume} or bulk {bc}{sx|large
私はこのようなものを手に入れようとしています。
having or marked by great volume or bulk
正規表現モジュールを使用してこれを実行しようとしています。
import re
text = "{bc}having or marked by great {a_link|volume} or bulk {bc}{sx|large"
new_text1 = re.sub("{","",text)
new_text2 = re.sub("}","",new_text1)
new_text3 = re.sub("a_link","",new_text2)
new_text4 = re.sub("|","",new_text3)
final_text = re.sub("bcsx.*","",new_text4)
こうして欲しい結果が得られましたが、5段階かかりました!これをより簡単に実行できますか?
答え1
使用幸せ(以前のPerl_6)
コマンドラインから:
~$ raku -pe 's:g/ \{ .*? [ \} | $ ]//;' file
または
~$ raku -pe 's:g{ \{ .*? [ \} | $ ] } = "";' file
必ずPythonでなければなりませんか? Rakuは、特に正規表現でトリッキーなUnicodeテキストを処理したい場合に最適です。上記(例1)では、おなじみのs///
代替演算子が使用されました。例2では、Rakuの最新の「割り当て」代替形式を使用します(例s{…} = "…"
:。
上記の例の1つ:Rakuは、\{
左の空想、.*?
ゼロ個以上の文字インスタンス(欲求不満の検索)を検索し、右の空想または(パイプライン演算子)で構成されています[
...]
括弧で区切られたグループが続きます。幅がゼロのアサーションで終わる文字列です。\}
|
$
この正規表現ソリューションは、入れ子になった中括弧の問題を解決できないことに注意してください。埋め込まれたサポートを使用するには、以下を参照してください。入れ子になった構造チルダ。
入力例:
{bc}having or marked by great {a_link|volume} or bulk {bc}{sx|large
出力例:
having or marked by great or bulk
https://docs.raku.org/言語/operators#s///_in-place_substitution
https://raku.org/