我正在尝试使用Python正则表达式删除HTML文件中的一些反应标记。部分HTML文件如下所示。
<span data-reactid="57">Price/Book</span><!-- react-text: 58 --> <!-- /react-text --><!-- react-text: 59 -->(mrq)<!-- /react-text --><sup aria-label="KS_HELP_SUP_undefined" data-reactid="60"></sup></td><td class="Fz(s) Fw(500) Ta(end)" data-reactid="61">8.36</td>
我的Python正则表达式代码如下所示。
cleandUpCode = re.sub(r'<!-- react-text: \d{1,2,3} -->', '', sourceCode)
sourceCode变量包含原始HTML源代码,其中包含所有反应垃圾。我可以运行代码,它会执行。但是当我将输出传递给文件并检查它时,所有反应垃圾标签仍然存在。
有人可以帮忙吗?
提前多多感谢。
-Frank
答案 0 :(得分:4)
为您的代码将\ d {1,2,3}更改为\ d {1,3}。量词{1,3}重复前一项1至3次。
Regex Quantifier:http://www.rexegg.com/regex-quickstart.html#quantifiers
<强>更新强>
如果您要删除除特定内容之外的所有react-text
,请改为使用:<!--[^>]*/?react-text[^>]*-->
。
答案 1 :(得分:0)
您只需要包含react标签中可能出现的最大位数。另外,要删除using System;
using System.Diagnostics;
class Program { static void Main() => new _derived(); }
abstract class _base
{
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public Object trace;
};
class _derived : _base
{
public _derived() => Debugger.Break(); // <-- vs2017 EE crash when stopped here
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
new public Object trace => base.trace;
}
(有和没有数字)的两个实例,您可以添加react
以尝试匹配其中一个:
|
输出:
cleandUpCode = re.sub(r'<!-- react-text: \d{1,3} -->|<!-- /react-text -->', '', sourceCode)
答案 2 :(得分:0)
如果您尝试使用python浏览HTML文档,使用名为BeautifulSoup 4的库会更容易,更实用。
您可以从https://pypi.python.org/pypi/beautifulsoup4
下载,
或者,您可以使用&#34; Pip&#34;通过在命令行中编写pip install beautifulsoup4
来下载它。而不是将其包含在项目from bs4 import BeautifulSoup
现在您应该从中提取文本,如果这是您想要做的事情。
from bs4 import BeautifulSoup
with open "text.txt" as text:
str = '<span data-reactid="57">Price/Book</span><!-- react-text: 58 --> <!-- /react-text --><!-- react-text: 59 -->(mrq)<!-- /react-text --><sup aria-label="KS_HELP_SUP_undefined" data-reactid="60"></sup></td><td class="Fz(s) Fw(500) Ta(end)" data-reactid="61">8.36</td>'
soup = BeautifulSoup(str, 'lxml')
soup = soup.get_text()
text.write(str(soup))