我正在编写一个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上,它在两个地方都有一个测试字符串,但不在我的脚本中(是的,我有导入重新编写)。我还尝试了其他解决方案,例如:\<.*\>
我只是没有正确的正则表达式或者更深层次的东西吗?
答案 0 :(得分:4)
字符串不可变,这意味着它们无法修改,只能重新分配。 re.sub(...)
正在运行,但它会返回 new 字符串。试试这个:
text = re.sub(r"<.*>", " ", text)
如果仍然无效,请向我们提供有关您问题的更多信息
答案 1 :(得分:1)
根据我的理解,您可能在同一行上有多个<...>
。在这种情况下,使用否定的字符类解决方案会更安全:
text = re.sub(r"<[^>]*>", " ", text)
当然,text
变量应该更新,因为Python字符串是不可变的,正则表达式现在匹配<
,然后除了>
以外的零个或多个字符,然后是>
。
请参阅regex demo