繁体   English   中英

python regex查找重音词

[英]python regex to find accented words

请我帮忙。 尝试在文本(西班牙语)中找到带重音的单词时遇到问题。 我必须在大文本中搜索以“ Nombrevernáculo”开头的第一段
例如,该文本为:“ ... ...”
但是我的python脚本无法识别带重音的单词。

我尝试过:

re.compile('/(?<!\p{L})(vern[áa]culo*)(?!\p{L})/')
re.compile(r'Nombre vern[a\xc3\xa1]culo\.', re.UNICODE)
re.compile ('[A-Z][a-záéíóúñ]+')
\p{Lu}] [\p{Ll}]+ \b

我已阅读以下主题:

grep / regex找不到重音词
Python Regex带有重音字符的奇怪行为
Python正则表达式和重音表达
Python:将正则表达式和令牌与带重音符号的字符一起使用(负向后看)

我也发现了几乎可行的方法:

In [95]: dd=re.search(r'^\w.*', 'Nombre vernáculo' )
In [96]: dd.group(0)
Out[96]: 'Nombre vern\xc3\xa1culo'

但是它还会返回文本中所有带重音的单词。

任何帮助将不胜感激。 谢谢。

最简单的方法与在Python 3中相同。这意味着您必须显式使用unicode而不是str对象,包括u前缀的字符串文字。 并且,理想情况下,在文件顶部有一个显式的编码声明,因此您也可以用Unicode编写文字。

# -*- coding: utf-8 -*-

import re

pattern = re.compile(ur'Nombre vern[aá]culo'`)
text = u'Nombre vernáculo'
match = pattern.search(text)
print match

请注意,我取消了\\. 在图案的末端。 您的文字不以结尾. ,因此您不应该寻找一个,否则它将失败。

当然,如果您要搜索源代码之外的文本,则需要对其进行decode('utf-8') ,或者对文件io.opencodecs.open进行decode('utf-8')而不只是open等)。


如果您不能使用编码声明,或者不能信任您的文本编辑器来处理UTF-8,您仍然可以使用Unicode字符串,只需使用Unicode代码点对字符进行转义即可:

import re

pattern = re.compile(ur'Nombre vern[a\xe1]culo'`)
text = u'Nombre vern\xe1culo'
match = pattern.search(text)
print match

如果必须使用str ,则必须像尝试那样手动编码为UTF-8并转义单个字节。 但是现在您不是要匹配单个字符,而是要匹配多个字符序列\\xc3\\xa1 因此,您不能使用字符类。 相反,您已将其显式地写成一个交替的组:

pattern = re.compile(r'Nombre vern(?:a|\xc3\xa1)culo')
text = 'Nombre vern\xc3\xa1culo'
match = pattern.search(text)
print match
import re
r1 = re.compile(r'(Nombre vernáculo)')
x = 'Nombre vernáculo registrado en la zona de'
match = r1.search(x)
print(match.group(1))

使用python 2:

/tmp> python2 test.py
  File "test.py", line 5
SyntaxError: Non-ASCII character '\xc3' in file test.py on line 5, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

使用python 3:

/tmp> python3 test.py 
Nombre vernáculo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM