我需要检测西班牙语中的大写单词,但只有当它们不在一个令牌之前,它才能有unicode字符。 (我在linux中使用Python 2.7.12)。
这项工作正常(非unicode令牌[例如guion:]
>>> import regex
>>> s = u"guion: El computador. Ángel."
>>> p = regex.compile( r'(?<!guion:\s) ( [\p{Lu}] [\p{Ll}]+ \b)' , regex.U | regex.X)
>>> print p.sub( r"**\1**", s)
guion: El computador. **Ángel**.
但同样的逻辑未能发现重音标记[例如guión:]:
>>> s = u"guión: El computador. Ángel."
>>> p = regex.compile( ur'(?<!guión:\s) ( [\p{Lu}] [\p{Ll}]+ \b)' , regex.U | regex.X)
>>> print p.sub( r"**\1**", s)
guión: **El** computador. **Ángel**.
预期结果将是:
guión: El computador. **Ángel**.
在regex101中代码工作得很好(在'pcr(php)'风格,而不是'python' flavor,因为由于某种原因,第一个似乎给出的结果更类似于命令行正则表达式的结果包中的python)。
是否由于我正在使用的python版本:2.7.12而不是python 3? 我很可能误解了一些事情。提前感谢任何方向。
经过大量的错误和奇怪的结果,我逐渐意识到:
regex
套餐是最佳选择,而不是re
因为更好
unicode支持(例如,提供上层和上层的区别)
小写unicode字符)。
必须设置regex.U
标志。 (regex.X
只是为了清晰起见而允许空格和注释)
u''
unicode字符串和r''
原始字符串可以同时合并:ur''
\p{Lu}
和\p{Ll}
分别匹配unicode大写和小写字符。