如何消除☎unicode?

raf*_*afa 7 python regex scrapy python-2.7

在网页抓取过程中以及在删除所有html标签之后,我在unicode(☎)中获得了黑色电话字符\ u260e.但与不同的是,我确实希望摆脱它.

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

pattern = re.compile("<.*?>|&nbsp;|&amp;",re.DOTALL|re.M)
Run Code Online (Sandbox Code Playgroud)

然后我试图匹配\ 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)
Run Code Online (Sandbox Code Playgroud)

这些都不起作用,我仍然有作为输出的\ u260e.我怎么能让它消失?

Rub*_*ens 6

使用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)
Run Code Online (Sandbox Code Playgroud)

输出:

u'bla ble  blo'
Run Code Online (Sandbox Code Playgroud)

正如@Zack指出的那样,这是因为字符串现在是unicode,即字符串已经被转换,字符序列\u260e现在是 - 可能 - 两个字节用来写那个小黑手机☎(:

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

  • 很好的答案,但你应该强调,这里的关键区别是所有字符串上的'u`前缀,即在Unicode而不是字节字符串上操作. (7认同)