使用 Python 解析文本

使用 Python 解析文本

我有这段文字;

{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/

相关内容