Python,使用正则表达式消除尖括号内的行

时间:2016-06-15 17:58:33

标签: python regex

我正在编写一个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,

即使每个文件中的标题数量相同,另一个&lt;&gt;材料各不相同,所以我不能只消除特定的线条。所以我想我会尝试一些像re.sub语句这样简单的东西来删除其中的所有内容&lt;&gt;并包括括号。

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

我试过&lt;。*&gt;在pythex.org和regex101上,它在两个地方都有一个测试字符串,但不在我的脚本中(是的,我有导入重新编写)。我还尝试了其他解决方案,例如:\<.*\>

我只是没有正确的正则表达式或者更深层次的东西吗?

2 个答案:

答案 0 :(得分:4)

字符串不可变,这意味着它们无法修改,只能重新分配。 re.sub(...)正在运行,但它会返回 new 字符串。试试这个:

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

如果仍然无效,请向我们提供有关您问题的更多信息

答案 1 :(得分:1)

根据我的理解,您可能在同一行上有多个<...>。在这种情况下,使用否定的字符类解决方案会更安全:

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

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

请参阅regex demo

Regular expression visualization