python正则表达式找到重音词

时间:2018-06-14 00:19:12

标签: python regex python-2.7

我需要帮助。当我试图在文本中找到重音词时(西班牙语),我遇到了问题。我必须在一个大文本中搜索以'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'

但它也会返回文本中所有重音词。

对此的任何帮助都会受到赞赏。 感谢。

2 个答案:

答案 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
相关问题