首页 > 解决方案 > pyspark - python 控制台和带有正则表达式的 jupyter-notebook 中的不同行为

问题描述

我正在尝试使用 jupyter-notebook 的 python(v2.7) 控制台中的're.findall'(re module) 来复制结果。到目前为止,我所知道的是 jupyter-notebook 将“ascii”作为默认编码,而我给出的是“utf8”。为了“修复”我在“re.findall”中使用“re.LOCALE”标志,解决了“崩溃”但没有得到像“ç”、“ã”或“ê”这样的字符。它只是截断“匹配”。例子:

像这样的字符串:“DVD com função karaokê mondial D-14”

应用“re.findall”功能

# -*- coding: utf-8 -*-
# lots of import here... 
import re

words = "dvd player com função karaokê mondial D-14"
brSpecialChars = r'[\w\dÁáÁàÃãÂâÉéÈèÊêÍíÓóÔÕÚúÜüÇç]'
prepositions = r'(a|ante|apos|após|ate|até|com|contra|de|desde|em|per|para|perante|por|sem|sob|sobre|tras|trás)' 
found = re.findall(r'(' + brSpecialChars + r'+\s+' + prepositions + r'\s+' + brSpecialChars + r'+)'
print "FOUND: {}".format(str(found))

我从 jupyter-notebook 在控制台中得到了这个打印

(u'player com fun', u'com', u' fun')

我从 python 控制台得到了这个

[('玩家com fun\xc3\xa7\xc3\xa3o', 'com', 'fun\xc3\xa7\xc3\xa3o')]

我不知道为什么。你能澄清一下吗?

标签: regexcharacter-encodingpysparkjupyter-notebook

解决方案


我找到了解决方法。不是解决方案本身,而是适用于这种特定情况。

我以前的正则表达式:

found = re.findall(r'(' + brSpecialChars + r'+\s+' + prepositions + r'\s+' + brSpecialChars + r'+)',words,flags=re.LOCALE

现在,要绕过任何编码废话,我可以这样做:

found = re.findall(r'([^\s]+\s+' + prepositions + r'\s+[^\s]+',words,flags=re.LOCALE)

结果:

(u'player com fun\xe7\xe3o karaok\xea', u'com', u' karaok\xea')

当然,我需要以同样的方式处理介词正则表达式。但是,重音问题是用那个非常丑陋的解决方案解决的!

如果有人有更好的想法,请在此处发布!


推荐阅读