Python 如何消除☎;unicode?
在网页抓取过程中,在去掉所有html标记后,我得到了unicode中的黑色电话字符\u260e(☎). 但不像我,我也想摆脱它 我在Scrapy中使用了以下正则表达式来消除html标记:Python 如何消除☎;unicode?,python,regex,python-2.7,scrapy,Python,Regex,Python 2.7,Scrapy,在网页抓取过程中,在去掉所有html标记后,我得到了unicode中的黑色电话字符\u260e(☎). 但不像我,我也想摆脱它 我在Scrapy中使用了以下正则表达式来消除html标记: pattern = re.compile("<.*?>| |&",re.DOTALL|re.M) pattern=re.compile(“| |&;”,re.DOTALL | re.M) 然后我尝试匹配\u260e,我想我被抓住了。我尝试了以下模式,但没有
pattern = re.compile("<.*?>| |&",re.DOTALL|re.M)
pattern=re.compile(“| |&;”,re.DOTALL | re.M)
然后我尝试匹配\u260e,我想我被抓住了。我尝试了以下模式,但没有成功:
pattern = re.compile("<.*?>| |&|\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)
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"<.*?>| |&|\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
- 如果不需要多个空格
soup = BeautifulSoup (html.decode('utf-8', 'ignore'))
回答很好,但您可能应该强调,这里的关键区别在于所有字符串上的
u
前缀,即在Unicode而不是字节字符串上操作。我想u前缀起了一些作用。它起了作用,谢谢。正如您在链接中提到的,原始字符串是反斜杠瘟疫的解毒剂。它可能不是最相关的t在这里,请记住这一点。与@Rubens answer一致,您面临的问题是常规字符串没有正确的unicode编码,除非您使用u
+1作为前缀,因为这是我第一次看到☎ 以这样的方式☎ 字符直接在终端上工作,但在我的管道上不工作。用\u260e替换它效果更好。感谢您提供这两个额外提示:)
soup = BeautifulSoup (html.decode('utf-8', 'ignore'))