2014-11-23 102 views
0

我在Python中对regex的使用还比较新,我很努力地找到一种方法来在非常简单的.txt文件中删除标记之间的内容。例如,请参阅filePython:从文本中删除<Table></Table>之间的文本

这是我已经试过:

fdir = open("C:\\file.txt") 
line = fdir.read() 
line = line.lower() 
pattern = re.compile("(?is)<table[^>]*>(.*?)<\/table>", re.MULTILINE) 
line = pattern.sub('', line) 

fdir = open("C:\\file.txt") 
line = fdir.read() 
line = re.sub(r"(?is)<table[^>]*>(.*?)<\/table>", '', line, re.DOTALL) 

两个代码只需取下标签<Table><\Table>在我的文本文件,而不是什么是介于两者之间。我的代码中缺少什么? 我希望标签也被删除。

+0

标签也应该删除。对不起,我很困惑 – Plug4 2014-11-23 05:30:48

+1

它适用于我。如果'(?s)'已经包含在你的正则表达式中,你不需要添加're.DOTALL'。 – 2014-11-23 05:35:20

+1

通常的布道适用。不要在HTML上使用正则表达式。 **正则表达式在技术上无法处理HTML。**使用[解析器](http://www.crummy.com/software/BeautifulSoup/)。 Python甚至使它变得非常容易。 – Tomalak 2014-11-23 05:57:56

回答

2

您应该考虑使用BeautifulSoup删除这些标签...

>>> from bs4 import BeautifulSoup 
>>> soup = BeautifulSoup(html) 
>>> for t in soup.find_all('table'): 
...  t.decompose() 
+0

ahhh很好!这样做! – Plug4 2014-11-23 06:08:19

1

使用re.sub

line = re.sub("(?is)<table[^>]*>(.*?)<\/table>", "", line) 

我同意托默勒格(见下面的注释):HTML shouldn't be parsed using regex - 这个答案仅用于演示,不应在生产代码中使用。

+0

请不要为HTML问题推荐正则表达式。 – Tomalak 2014-11-23 05:51:43

+0

@Tomalak我不推荐HTML问题的正则表达式。 – alfasin 2014-11-23 06:01:37

+0

这就是分裂。您的回答支持使用正则表达式来处理HTML。而20 + K代表你应该知道更好。 – Tomalak 2014-11-23 06:07:38

相关问题