1

私はPython3reモジュール文字列をパターン「(c、c、c)」を使用して解析しようとしています。ここで、cは(a、b、ë、ɪ̈)から選択される1文字です。私はそのようなものを書きました:

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

ただし、正規表現はɪ̈では機能しません。Pythonは、ɪ̈を2つの文字(ɪ+ diairesis)、idestɪと発音区別符号で構成されていると分析します。正規表現は「(a、b、ɪ̈)」の読み方を知りません。私はëと同じ問題を抱えていません。Pythonはëを1つの文字として分析し、私の正規表現は「(a、b、ë)」を読み取ることができ、期待される答えを提供します。unicodedata.normalize('NFD'、...)をsrcpatternに適用したおかげで、正規化アプローチを使用しようとしましたが、失敗しました。

この問題をどのように解決しますか?私を助けてくれるといいですね!

PS: pythonmのおかげでいくつかのタイプミスを修正しました。

4

1 に答える 1

3

あなたは|それを回避するために使用することができます:

#!/usr/bin/env python3
import re

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

上記はɪ̈2文字として扱われます:

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

出力:

branch 
  in 
    literal 97
    literal 98
    literal 235
or
  literal 618 
  literal 776 
于 2012-09-04T16:44:36.090 に答える