[英]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.open
或codecs.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.