我有这段文字;
{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{…} = "…"
。
上面的任一示例: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/language/operators#s///_in-place_substitution
https://raku.org/