regex - 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')]
我不知道为什么。你能澄清一下吗?
解决方案
我找到了解决方法。不是解决方案本身,而是适用于这种特定情况。
我以前的正则表达式:
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')
当然,我需要以同样的方式处理介词正则表达式。但是,重音问题是用那个非常丑陋的解决方案解决的!
如果有人有更好的想法,请在此处发布!
推荐阅读
- hive - HiveAccessControlException 权限被拒绝:用户没有 [ALL] 权限
- gnuplot - Gnuplot 整数溢出
- java - 忽略 JSON 到 XML 转换中的键
- java - 在具有命名空间的 Java 中针对模式的 XML 验证失败
- tfs - 我应该将自定义构建步骤放在 MSBuild 还是 TFS/Azure DevOps 构建管道中?
- android - 为什么来自 PWA 的 web apk 没有 Internet 权限?
- python - 如何确定客户端是否在 tkinter 消息框中选择了“ok”?
- python-3.x - 如何在 Python 中使用“尝试写入小于 Content-Length 的 x 字节”来修复龙卷风错误
- arrays - Countifs 公式在使用数组排除时不起作用,但适用于包含
- python - Python any() 条件未返回正确的输出