我需要帮助。当我试图在文本中找到重音词时(西班牙语),我遇到了问题。我必须在一个大文本中搜索以'Nombrevernáculo'开头的第一段
例如,文字如下:“Nombrevern'culoregistrado en la zona de ...”
但是我的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 can't find accented word
Python Regex strange behavior with accented characters
Python regex and accented Expression
Python: using regex and tokens with accented chars (negative lookbehind)
我也找到了几乎可以工作的东西:
In [95]: dd=re.search(r'^\w.*', 'Nombre vernáculo' )
In [96]: dd.group(0)
Out[96]: 'Nombre vern\xc3\xa1culo'
但它也会返回文本中所有重音词。
对此的任何帮助都会受到赞赏。 感谢。
答案 0 :(得分:0)
执行此操作的最简单方法与您在Python 3中执行此操作的方式相同。这意味着您必须明确使用unicode
而不是str
个对象,包括{{1} } -prefixed string literals。理想情况下,文件顶部有一个显式编码声明,因此您也可以用Unicode编写文字。
u
请注意,我在模式结尾处放弃了# -*- 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.open
文件,而不是只是codecs.open
等等。
如果您不能使用编码声明,或者不能信任您的文本编辑器来处理UTF-8,您仍然可以使用Unicode字符串,只需使用Unicode代码点转义字符:
open
如果必须使用import re
pattern = re.compile(ur'Nombre vern[a\xe1]culo'`)
text = u'Nombre vern\xe1culo'
match = pattern.search(text)
print match
,则必须手动编码为UTF-8并转义单个字节,就像您尝试的那样。但是现在你并没有尝试匹配单个字符,而是一个多字符序列str
。所以你不能使用一个角色类。相反,您已将其明确地写为具有替代的组:
\xc3\xa1
答案 1 :(得分:-1)
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