我需要检测西班牙语中的大写单词,但前提是它们前面没有标记,标记可以包含unicode字符。(我在linux中使用python2.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中的命令行regex包)。你知道吗
这是因为我使用的是python版本:2.7.12而不是python3吗?。 很可能我误解了什么。提前谢谢你的指点。你知道吗
在经历了很多错误和奇怪的结果之后,我逐渐意识到:
regex
包是一个不错的选择,而不是re
,因为它有更好的
unicode支持(例如,提供了对大写和小写的区分
小写unicode字符)。
必须设置regex.U
标志。(regex.X
为了清晰起见,只允许空格和注释)
u''
unicode字符串和r''
原始字符串可以同时组合:ur''
\p{Lu}
和\p{Ll}
分别匹配unicode大小写字符。
目前没有回答
相关问题 更多 >
编程相关推荐