0

我想解析一个包含 html 锚标记的原始文档,但不幸的是它包含无效的标记,例如:

<a href="A 4"drive bay">some text here</a>

我知道这个href值可能不是一个实际的链接,但我们就这样吧。现在我需要的是检索 href 值'A 4"drive bay' 和链接文本'some text here'

我正在使用 python,我已经尝试了 python 库“ BeautifulSoup ”,它在检索所有锚标记方面效果很好。但问题是它在遇到提到的无效锚标记时标记错误,其中href值包含' '。这种情况存在于我正在解析的原始数据中,并且修改此类数据不是一个选项..

我使用 BeautifulSoup 的 Python 代码的一部分是:

sub_s = BeautifulSoup(line)
for l in sub_s.find_all('a'):
   l.replace_with(l.string)
print str(sub_s),

该代码只是将锚标记替换为纯文本

如果有人可以帮助我解决这个问题,我将非常感激......正则表达式也可以...... ^^

4

2 回答 2

0

我想你可以通过正则表达式预先过滤你的输入文本来纠正这个特定的问题。就像是:

>>> r = re.compile('''<a[^>]+href="([^>]+)">''')
>>> m = r.match(text)
>>> m.group(1)
'A 4"drive bay'
>>> r.sub('<a href="%s">' % m.group(1).replace('"', ' '), text)
'<a href="A 4 drive bay">some text here</a>'

这不是一个完整的解决方案;只是关于如何前进的想法。

于 2012-05-07T19:16:37.147 回答
0

Selfhtm 8.1.2(在德国非常常用的 HTML 文档)建议:

  1. 第一个位置拉丁字符(az,AZ)
  2. 后面的拉丁字符、数字 (0-9)、-、_ 或 .

我使用以下正则表达式来确保第一个要求:

name="[^a-zA-Z]

(nb 第一个前导空格似乎不那么重要,适用于大多数正则表达式实现,例如 helios 的 textpad 编辑器)

为了简化工作,我还有一个正则表达式来满足另一个要求:它还捕获一个字符锚(它们是有效的),但这将有助于识别可能的问题:

name=".?[^a-zA-Z0-9_\.-][^"]*"

我使用语法检查器发现的大多数其他问题。

于 2016-04-21T09:37:20.167 回答