Python 如何消除☎;unicode?

Python 如何消除☎;unicode?,python,regex,python-2.7,scrapy,Python,Regex,Python 2.7,Scrapy,在网页抓取过程中,在去掉所有html标记后,我得到了unicode中的黑色电话字符\u260e(☎). 但不像我,我也想摆脱它 我在Scrapy中使用了以下正则表达式来消除html标记: pattern = re.compile("<.*?>|&nbsp;|&amp;",re.DOTALL|re.M) pattern=re.compile(“| |&;”,re.DOTALL | re.M) 然后我尝试匹配\u260e,我想我被抓住了。我尝试了以下模式,但没有

在网页抓取过程中,在去掉所有html标记后,我得到了unicode中的黑色电话字符\u260e(☎). 但不像我,我也想摆脱它

我在Scrapy中使用了以下正则表达式来消除html标记:

pattern = re.compile("<.*?>|&nbsp;|&amp;",re.DOTALL|re.M)
pattern=re.compile(“| |&;”,re.DOTALL | re.M)
然后我尝试匹配\u260e,我想我被抓住了。我尝试了以下模式,但没有成功:

pattern = re.compile("<.*?>|&nbsp;|&amp;|\u260e",re.DOTALL|re.M)
pattern = re.compile("<.*?>|&nbsp;|&amp;|\\u260e",re.DOTALL|re.M)
pattern = re.compile("<.*?>|&nbsp;|&amp;|\\\\u260e",re.DOTALL|re.M)
pattern=re.compile(“| |&;| \u260e”,re.DOTALL | re.M)
pattern=re.compile(“| |&;| \\u260e”,re.DOTALL | re.M)
pattern=re.compile(“||&;|\\\\u260e”,re.DOTALL | re.M)
这些都不起作用,我仍然有\u260e作为输出。
如何使其消失?

使用Python 2.7.3,以下功能对我来说很好:

import re

pattern = re.compile(u"<.*?>|&nbsp;|&amp;|\u260e",re.DOTALL|re.M)
s = u"bla ble \u260e blo"
re.sub(pattern, "", s)
正如@Zack所指出的,这是因为字符串现在是unicode格式的,也就是说,字符串已经被转换了,字符序列
\u260e
现在是——可能是——两个字节,用来写那个黑色的小电话☎ (:


一旦要搜索的字符串和正则表达式都有了黑色电话本身,而不是字符序列,它们就都匹配了。

如果您的字符串已经是unicode,有两种简单的方法。第二种方法将不仅仅影响☎, 很明显

>>> import string                                   
>>> foo = u"Lorum ☎ Ipsum"                          
>>> foo.replace(u'☎', '')                           
u'Lorum  Ipsum'                                     
>>> "".join(s for s in foo if s in string.printable)
u'Lorum  Ipsum'      
  • 有关
    string.printable
  • 如果不需要多个空格

如前所述,您可以尝试使用BeatifulSoup,例如

soup = BeautifulSoup (html.decode('utf-8', 'ignore'))

回答很好,但您可能应该强调,这里的关键区别在于所有字符串上的
u
前缀,即在Unicode而不是字节字符串上操作。我想u前缀起了一些作用。它起了作用,谢谢。正如您在链接中提到的,原始字符串是反斜杠瘟疫的解毒剂。它可能不是最相关的t在这里,请记住这一点。与@Rubens answer一致,您面临的问题是常规字符串没有正确的unicode编码,除非您使用
u
+1作为前缀,因为这是我第一次看到☎ 以这样的方式☎ 字符直接在终端上工作,但在我的管道上不工作。用\u260e替换它效果更好。感谢您提供这两个额外提示:)
soup = BeautifulSoup (html.decode('utf-8', 'ignore'))