2017-03-02 3 views
1

私はPythonには新しく、マッチを実行して置換する最も効率的な方法を見つけることを試みています。ここに私の問題があります。Pythonのテキストマッチと置換手法の推奨

私は以下のようなエントリを持つ辞書を持っています。

myInput = raw_input() 
# Example input: I HAVE A DOG NAMED MAX 

そしてmyDictで鍵を使用してこの入力一致:スタータグで

input: 'I HAVE A DOG NAMED *MAX*' matches with dictionary key: 'I HAVE A * NAMED *' 

そして、出力キーの値を

myDict = {'I HAVE A * NAMED *':'A <star=1> named <star=2> is cool!'} 

私の目標は、入力を持つことです欠落したmyInput単語、DOGとMAXに置き換えられました。

output = 'A DOG named MAX is cool!' 

どのセイジアドバイスも大歓迎です!

答えて

1

これは何を望みですか?

import re 

myDict = {'I HAVE A (.+) NAMED (.+)':'A <star=1> named <star=2> is cool!'} 
input="I HAVE A dog NAMED max" 

for x in myDict.keys(): 
    if re.match(x,input) : 
     d=myDict[x] 
     for n in range(1, 3): 
      d = d.replace('<star='+str(n)+'>',re.match(x,input).group(n)) 
     print '=>', d 
+0

クール。これは機能します。私は正規表現の初心者であることを認めます。私はそれらをさらに見ていきます。ありがとう! – kanecain

+0

're.sub'を使う方がいいです。その後、手動で交換する必要はありません。それは速くなります – Wombatz

1

これはあなたのための別の解決策になるかもしれませんでも、シューLimbergerは、すでに私たちに良い解決策を示した:)

import re 


def convert(sentence, mapping, predefined_regex): 
    for k, v in mapping.iteritems(): 
     p = re.compile(k.format(**predefined_regex)) 
     g = p.search(sentence) 
     if g: 
      keywords = g.groupdict() 
      converted_sentence = v.format(**keywords) 
      return converted_sentence 
    return None 


predefined_regex = { 
    "type": "(?P<type>\w+)", 
    "name": "(?P<name>\w+)" 
} 
my_dict = { 
    "I have [a|an] {type} named {name}": "A {type} named {name} is cool!", 
    "You have [a|an] {type} named {name}": "{name} likes you!" 
} 
sentences = [ 
    "I have a dog named Max.", 
    "You have a cat named Kitty.", 
    "He has a pig named Max" 
] 
for sentence in sentences: 
    converted_sentence = convert(sentence, my_dict, predefined_regex) 
    if not converted_sentence: 
     converted_sentence = "Not found" 
    print("{} -> {}".format(sentence, converted_sentence)) 

参考:

+0

ありがとう!私はそれを与えるだろう! – kanecain

関連する問題