Python3中的正则表达式如何处理变音符号?

时间:2012-09-04 16:11:07

标签: regex unicode python-3.x

我尝试使用模式“(c,c,c)”解析 Python3 re 模块字符串,其中c是要选择的一个字符( a,b,ë,ɪ̈)。我写了类似的东西:

src="(a,b,ɪ̈)"
pattern = "[abëɪ̈]"
for r in re.finditer( '\({0},{0},{0}\)'.format(pattern), src ):
    print( r.group() )

但正则表达式不适用于ɪ̈; Python分析ɪ̈由两个字符组成(ɪ+ diairesis),id estɪ加一个变音符号:正则表达式不知道如何阅读“(a,b,ɪ̈)”。 ë;我有同样的问题; Python分析ë作为一个字符,我的正则表达式能够读取“(a,b,ë)”,给出预期的答案。 由于unicodedata.normalize('NFD',...)应用于 src pattern ,我尝试使用规范化方法,但未成功。

我该如何解决这个问题?能帮到我真好!

PS:由于 pythonm ,我修正了一些拼写错误。

1 个答案:

答案 0 :(得分:3)

您可以使用|来解决问题:

#!/usr/bin/env python3
import re

print(re.findall(r'\({0},{0},{0}\)'.format("(?:[abë]|ɪ̈)"), "(a,b,ɪ̈)"))
# -> ['(a,b,ɪ̈)']

以上将ɪ̈视为两个字符:

re.compile(r'[abë]|ɪ̈', re.DEBUG)

输出:

branch 
  in 
    literal 97
    literal 98
    literal 235
or
  literal 618 
  literal 776