簡體   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