Python BeautifulSoup将单引号替换为双引号

Python BeautifulSoup将单引号替换为双引号,python,beautifulsoup,Python,Beautifulsoup,在Python的BeautifulSoup4中,如果执行以下命令: soup = BeautifulSoup("<a href='http://somelink'>link</a>") print soup 给定http://www.download3000.com/page和上面的示例,my函数返回以下正则表达式:\w\w>\w\w\w\w 如果我将正则表达式应用于download3000的html代码,它将找不到任何匹配项。这是因为链接在html中被单引号包围,但当

在Python的BeautifulSoup4中,如果执行以下命令:

soup = BeautifulSoup("<a href='http://somelink'>link</a>")
print soup
给定
http://www.download3000.com/
page和上面的示例,my函数返回以下正则表达式:
\w\w>
  • \w\w\w\w
  • 如果我将正则表达式应用于download3000的html代码,它将找不到任何匹配项。这是因为链接在html中被单引号包围,但当我使用BeautifulSoup时,它将单引号替换为双引号,并且生成的正则表达式仅适用于由BeaurifulSoup修改的html

    这就是为什么我需要强制BeautifulSoup不要用双引号替换单引号,这样生成的正则表达式将是
    \w\w>
  • \w\w\w\w
  • ,从而从页面中提取我需要的内容


    我可以使用一个转储解决方案,比如用
    [“\']
    替换正则表达式中的所有单引号,但是正则表达式也会捕获一些我不想要的链接。

    这适用于BeautifulSoup 3.2。我假设发生的情况是,当单引号转换为
    时,解析器会用 然后在输出时出现模式

    >>> c="<a href='http://somelink'>"
    >>> from BeautifulSoup import BeautifulSoup
    >>> import re
    >>> d=re.sub("'","&quot;",c)
    >>> e=BeautifulSoup(d)
    >>> def qfix(x):  return re.sub("\'\"|\"'","'",x)
    >>> qfix((str(e))
    
    >c=“”
    >>>从BeautifulSoup导入BeautifulSoup
    >>>进口稀土
    >>>d=re.sub(“,”,c)
    >>>e=美组(d)
    >>>def qfix(x):返回re.sub(“\”\“\”\”、“\”,x)
    >>>qfix((str(e))
    
    您可能可以在Beautifulsoup4中使用类似于“qfix”的格式化程序


    或者它可能根本不起作用:)

    你为什么不想这样?意思是一样的。BeautifulSoup是一个用于访问HTML文档内容的库,这些内容保存得很好。@Martijn Pieters我正在编写一个正则表达式生成器。Atm它可以生成正则表达式,但由于BeautifulSoup和生成的reg-ex在原始文档中不匹配,因此reg-ex包含双引号而不是单引号。您确实应该避免在此处使用正则表达式。而且您的正则表达式生成器不能调整为使用
    [“']
    来代替?@IonutHulub:为什么不做一个简单的字符串替换呢?我不能只使用一个sting替换,因为这样它也会捕获双引号,而我(总是)不会这样做想被抓住。我不想听起来粗鲁,但如果你停止质疑我的理由,只提供一个答案就好了。3.2.1对我来说不起作用,但应该补充一点,我已经在处理unicode HTML了,所以可能区别纯粹在于使用
    str(e)
    而不是
    unicode(e)
    samples = [
        '/showarticles-1-0-date.html',
        '/showarticles-2-0-date.html',
        '/showarticles-3-0-date.html'
    ]
    
    >>> c="<a href='http://somelink'>"
    >>> from BeautifulSoup import BeautifulSoup
    >>> import re
    >>> d=re.sub("'","&quot;",c)
    >>> e=BeautifulSoup(d)
    >>> def qfix(x):  return re.sub("\'\"|\"'","'",x)
    >>> qfix((str(e))