替换字符串 Python 中的所有字符串实例

Replacing all instances of string in string Python

现在我输出到一个文件是这样的:

<b>Nov 22–24</b>   <b>Nov 29–Dec 1</b>    <b>Dec 6–8</b> <b>Dec 13–15</b>   <b>Dec 20–22</b>   <b>Dec 27–29</b>   <b>Jan 3–5</b> <b>Jan 10–12</b>   <b>Jan 17–19</b>   <b><i>Jan 17–20</i></b>    <b>Jan 24–26</b>   <b>Jan 31–Feb 2</b>    <b>Feb 7–9</b> <b>Feb 14–16</b>   <b><i>Feb 14–17</i></b>    <b>Feb 21–23</b>   <b>Feb 28–Mar 2</b>    <b>Mar 7–9</b> <b>Mar 14–16</b>   <b>Mar 21–23</b>   <b>Mar 28–30</b>   

我想删除所有“”和 css 标签()。我尝试使用 .remove 和 .replace 函数,但出现错误:

SyntaxError: Non-ASCII character '\xc2' in file -- FILE NAME-- on line 70, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

上面的输出在一个列表中,这是我从网络爬虫函数中得到的:

def getWeekend(item_url):
    dates = []
    href = item_url[:37]+"page=weekend&" + item_url[37:]
    response = requests.get(href)
    soup = BeautifulSoup(response.content, "lxml")  # or BeautifulSoup(response.content, "html5lib")
    date= soup.select('table.chart-wide > tr > td > nobr > font > a > b')
    return date

我这样写到文件中:

for item in listOfDate:
    wr.writerow(item)

如何删除所有标签,只留下日期?

我不确定,但我认为 aString.regex_replace('toFind', 'toReplace') 应该可行。或者将其写入文件,然后 运行 像这样对它进行 sed:sed -i 's/toFind/toReplace/g'

问题是您没有来自该网站的 ASCII 字符串。您需要先将非 ASCII 文本转换成 Python 可以理解的内容,然后再对其进行操作。

Python 将在有机会时使用 Unicode。如果你只是看看,那里有很多信息。例如,您可以从本网站的其他问题中找到更多帮助:

Python: Converting from ISO-8859-1/latin1 to UTF-8

python: unicode in Windows terminal, encoding used?

What is the difference between encode/decode?

您已经有了一个可行的解决方案,但对于未来:

  1. 使用get_text()去除标签

date = soup.select('table.chart-wide > tr > td > nobr > font > a > b').get_text()

  1. 使用.replace(u'\xc2',u'')去掉Âu 使 u'\xc2' 成为一个 unicode 字符串。 (这可能需要一些编码,但对我来说 get_Text() 已经返回了一个 unicode 对象。)

(另外,可能考虑 .replace(u'\u2013',u'-') 因为现在,你有一个破折号 :P。)

date = date.replace(u'\xc2',u'').replace(u'\u2013',u'-')

如果您的 Python 2 源代码具有文字非 ASCII 字符,例如 Â,那么您应该按照错误消息所述声明源代码编码。放在 Python 文件的顶部:

# -*- coding: utf-8 -*-

确保使用 utf-8 编码保存文件并使用 Unicode 字符串处理文本。