Python 使用BeautifulSoup或正则表达式分析无效的锚标记

Python 使用BeautifulSoup或正则表达式分析无效的锚标记,python,regex,parsing,html-parsing,beautifulsoup,Python,Regex,Parsing,Html Parsing,Beautifulsoup,我希望parse解析包含html锚标记的原始文档,但不幸的是,它包含无效标记,例如: <a href="A 4"drive bay">some text here</a> 代码只是将锚定标记替换为纯文本 如果有人能帮我解决这个问题,我会非常感激。。。 正则表达式也可以^^ 我想您可以通过正则表达式对输入文本进行预过滤,以更正此特定问题。比如: >>> r = re.compile('''<a[^>]+href="([^>]+)">

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

<a href="A 4"drive bay">some text here</a>
代码只是将锚定标记替换为纯文本

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

我想您可以通过正则表达式对输入文本进行预过滤,以更正此特定问题。比如:

>>> 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>'

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

Selfhtm 8.1.2德国经常使用的HTML文档建议:

第一位拉丁字符a-z,a-z 后面的拉丁字符,数字0-9,-,或。 我使用以下正则表达式来确保第一个要求:

name="[^a-zA-Z]
n。B第一个前导空间似乎并不那么重要,它适用于大多数正则表达式实现,例如。Ghelios的textpad编辑器

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

name=".?[^a-zA-Z0-9_\.-][^"]*"
我在语法检查器中发现的大多数其他问题

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