Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python正则表达式查找重音词_Python_Regex_Python 2.7 - Fatal编程技术网

python正则表达式查找重音词

python正则表达式查找重音词,python,regex,python-2.7,Python,Regex,Python 2.7,求你了,我需要帮助。我在文本(西班牙语)中查找重音词时遇到问题。我必须在一个大文本中搜索第一段,以“Nombre vernáculo”开头 例如,文本是这样的:“Nombre vernáculo 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) r

求你了,我需要帮助。我在文本(西班牙语)中查找重音词时遇到问题。我必须在一个大文本中搜索第一段,以“Nombre vernáculo”开头
例如,文本是这样的:“Nombre vernáculo 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
但它也会返回文本中所有带重音的单词

在此方面的任何帮助都将不胜感激。 谢谢

对于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

最简单的方法与在Python3中的方法相同。这意味着您必须明确使用
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
请注意,我在模式的末尾省略了
\.
。您的文本不会以
结尾,因此您不应该寻找一个,否则它将失败

当然,如果您想搜索源代码之外的文本,您需要
解码('utf-8')
它,或
io。打开
编解码器。打开
文件,而不是只打开


如果您不能使用编码声明,或者不能信任文本编辑器处理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

这是Python2还是Python3?还有,这些正则表达式应该做什么?第一个函数中有一个
\p
,它在Python字符串或Python正则表达式中没有任何意义。第二个是将UTF-8字节作为字符(如果是Python 3)插入字符串,或者搜索
a
\xc3
、或
\xa1
(如果是Python 2)中的任何一个字节,这两个字节都不是很有用。第三个问题似乎与您试图解决的问题没有任何关系。第四个甚至不是Python。@abarnert是Python2.7。您为什么要使用Python2.7?因为让这些东西变得更简单是Python 3存在的一个重要原因。我不知道有哪种平台可以使用Python 2.7,但不能使用Python 3。同时,如果你是一个初学者,学习一门更流行、更容易学习、有前途的语言要比学习一门距离最终寿命不到一年半的旧语言要好得多。给别人一段引起语法错误的代码有什么帮助?@Jonah Caplan谢谢,我不知道为什么,但我没有得到你写的错误。它在我的python版本中也可以用来查找单词。谢谢,谢谢。第二种选择非常有效。你帮了我很多。
import re

pattern = re.compile(ur'Nombre vern[a\xe1]culo'`)
text = u'Nombre vern\xe1culo'
match = pattern.search(text)
print match
pattern = re.compile(r'Nombre vern(?:a|\xc3\xa1)culo')
text = 'Nombre vern\xc3\xa1culo'
match = pattern.search(text)
print match