2

負のユニコード絵文字のさまざまな可能な組み合わせに一致する正規表現を作成しようとしています。以下のリストtest_2に含まれる絵文字のタイプを一致させるのに問題があります。絵文字に一致する英数字以外の記号は正規表現内に正しく配置されていると思いますが、絵文字も左目(eye1という名前のキャプチャされたグループ)も一致していません...どうすれば解決できますか?ありがとう

neg_emoticon_regular = ur"""
  [\((]?     #optional left parenthesis
  \s*         #optional space   
  [\`\#\ ́]?   #optional symbols between left parenthesis and left eye
  (?P<eye1>[\ー\; \́\`\・\>Tt\ー\ ̄\−\-\゚~\_\.\>\*\/]) #left eye
  \s*         #optional space                     
  [\。\。\Δ\-\人\O\0\.\Д\д\o\−\_\ω\ヘ\^\_]? #mouth
  \s*         #optional space  
  [(?P=eye1)\`\<\’]   #right eye, usually will match left eye                
  [\A\#\;]?   #optional symbols between right eye and right parenthesis
  \s*         #optional space
  [\)\)]?    #optional right parenthesis   
"""

neg_emoticon_re = re.compile(neg_emoticon_regular, re.VERBOSE  | re.UNICODE)
test_2 = ["(−_−#)","(-。-;","(-_-)"] #negative emoticons to match
for e in test_2:
    e_uc_norm = unicodedata.normalize('NFKC', e.decode("utf-8"))
    m = neg_emoticon_re.search(e_uc_norm) 
    if m: print "eye1:",m.group("eye1") #print the symbol that is supposed to be the left eye
    print len(neg_emoticon_re.findall(e_uc_norm)), e_uc_norm
4

1 に答える 1

3

正規表現で[...]は、は文字のセットであるため[\((]、開き括弧またはスペース(短縮可能[( ])のいずれか[\s+]?に一致し、オプションの空白文字またはプラス記号に一致します。

于 2012-07-14T01:19:59.510 に答える