2016-05-24 102 views
1

我试图使用sed从一个巨大的语料库(超过2百万行)中删除标签,但它不匹配特殊字母字符(例如ãẽéó)与'任何字符' 正则表达式sed与点(。)不匹配的特殊字母字符

样品从语料库(。):

<ext id=1 cad="Opinião" sec="opi" sem="94a"> 
PT no governo 
Gilberto Dimenstein 

BRASÍLIA Pesquisa Datafolha publicada hoje revela um dado supreendente: recusando uma postura radical, a esmagadora maioria (77%) dos eleitores quer o PT participando do Governo Fernando Henrique Cardoso . 

我想删除所有标签(它们都遵循与 “转ID = [0-9] CAD” 等相同的结构) ,所以我试图用

sed 's/<.\+>//g' file1.txt > file2.txt 

它为大多数人创造了奇迹,但由于我提到的特殊字母字符,我仍然有一些剩余。我该怎么办?

+0

的代码适用于我对你的样品输入。你能举一个代码失败的例子吗?显示您使用的输入和输出。你收到。 – John1024

+1

您的语言环境设置和该文件的编码将被添加importabt细节。具体而言,在'C'语言环境中,每个字节都被视为一个单独的字符,但是如果该文件使用多字节或可变长度编码(如UTF-8),则非ASCII字符占用多个字节。 – tripleee

+1

使用正则表达式解析或编辑XML/HTML可能非常脆弱。通常的建议是使用XML特定的解析器。 –

回答

1

在您的具体情况,可能是最简单的方法是使用[^>]字符类标签的内容相匹配:

​​

这只有标签内容相匹配的一个额外的好处,原始正则表达式会从第一个标记的开始处直到最后一个标记的末尾删除。例如,给定

foo <a...> bar <b...> baz 

原始表达式将取代<a...> bar <b...>

foo baz 

但是这一次将取代<a...><b...>

foo bar baz 
+0

@TobySpeight好吧,这段长度的代码不需要解释,而且这里没有魔法。我回答这个问题只是为了解决问题,而不是为了教育人们。对不起。 – pdg

+0

我为你添加了一个解释。 HTH –