2016-06-15 78 views
0

我正在写一个python脚本来为几个文本文件中的单词分配语法类别。在每个文本文件中,我在尖括号<>内有文件头。在整篇文章中,还有附加的行,包括时间戳,页码和抄录器中的问题等信息。我想删除这些行。这基本上是文本文件的样子:Python,使用正则表达式消除尖括号内的行

<title  Titipuru Supay> 
<speaker name> 
<sex  female> 
<dialect Pastaza> 
<register narrative> 
<contributor name> 

chan; payguna serenkya man chiga; 
<ima?> 
payguna kirina man, chiga, mana 
shayachira; ninagunan shi tujsirani nira: 
illaparani nira shi illapay 
<173> 
pasasha, ima shi kasna nin, nisha, 

即使有相同数量的每个头文件的其他<>材料而异,所以我不能只是消除特定行。所以我想我会尝试一些简单的方法,像re.sub语句,它可以消除所有内容,包括括号在内的所有内容。

with open(file, encoding='utf-8') as file_in: 
     text = file_in.read() 
     re.sub(r"<.*>", " ", text) 

我试过<。*>上pythex.org和regex101它与测试字符串这两个地方的工作,但不是在我的脚本(是的,我有进口重)。我也试过其他的解决方案,如:\<.*\>

我只是没有得到正确的或正确的东西吗?

+3

你怎么知道它是不是工作?你是否坚持're.sub()'的某个地方的结果? - 它不适用 - 生成一个新的字符串。 – alecxe

+0

我在它下面添加了一个打印(文本)语句,并且在输出中我可以看到所有的<>材质仍然保留 – Wangana

+1

尝试'text = re.sub(r“<[^>”*>“,”“,text )'。否则,请添加更多文本以进行测试。 –

回答

1

据我了解,你可以在同一条线上有几个<...>。在这种情况下,你是一个否定的字符级解决方案,更安全:

text = re.sub(r"<[^>]*>", " ", text) 

text变量,当然应该为Python中的字符串是不可变的更新,而正则表达式现在匹配<,然后零或除>之外的更多字符,然后是>

regex demo

Regular expression visualization

+0

嗯,我确实有这个代表,但现在不再了,当我回到15岁时,我一定会回来投票你的答案。再次感谢。 – Wangana

4

字符串是不可变,意思是它们不能修改,只能重新分配。 re.sub(...)正在工作,但它返回一个新的字符串。试试这个:

text = re.sub(r"<.*>", " ", text) 

如果仍然不能正常工作,请给我们更多的信息,关于您的问题

+1

这也是我写出来的解决方案。您需要用其他名称替换该行,因为re.sub会返回一个新字符串,而不会替换输入的字符串。 – HMSCelestia

+0

Ooops,是的,我想我忘记了文字=,但是我做到了,而且大部分工作,我仍然有头部的碎片出现在这里和那里,始终与第一个支架: 。 <14:46 – Wangana

+0

@AlexR。,你能否提供一个它不起作用的例子,以便我们可以测试它? – Brian