2010-12-12 15 views
2

文字列で何がわからないかを調べる方法を知りました。私はIRCボットを書いており、この機能が必要です。グレッグPythonで文字列のxを見つける方法

を迎える

、その後、私のボットが言うことになっている!:私は書くことができるようにしたい「こんにちはグレッグを!」。ですから、挨拶の後に来るのは変わります。そして、もし私が書いたら、マシューに挨拶します。「こんにちは、マシュー! これは可能ですか?

ありがとうございます。

Andesay

+1

なぜ投票が下りましたか? –

+0

質問が不明なので推測します。 (それは私ではありませんでした)+0 –

+1

これは本当にシンプルでなければ、本当のパーサを構築する必要があるでしょうか? – delnan

答えて

3
if command.lower().startswith('!greet '): 
    put('Hi, ' + command[7:].strip() + '!') 

'!greet Greg' -> [ put()s 'Greg' ] 
'!Greet Fred ' -> [ put()s 'Fred' ] 
'!hello John' -> [ nothing ] 
+0

一部のモジュールはどのモジュールに入れられていますか?コードサンプルを試してみるとputは定義されていません。 – Andesay

+0

msgを送信する関数にputを変更する必要があります。 putは単なる関数の例です。 –

+1

@Andesay: 'print 'こんにちは、{0}!'フォーマット(コマンド[7:]。ストリップ())' – user225312

-1

挨拶で "グレッグ" 場合: のdoSomething( "こんにちはグレッグ")

キーは文字列がオペレータで

+1

すばやい答えをありがとう!しかし、もし私がそこに置かれる名前が分からなかったら? – Andesay

1

を取るということですそれは簡単です:

>>> import re 
>>> m = re.search(r"!greet (?P<name>.+)", "!greet Someone") 
>>> m.group("name") 
'Someone' 
3
import re 
... 
input = '!greet Greg' 
m = re.match(r'!greet\s+(.*)', input) 
if m: 
    print 'Hi, %s!' % m.group(1) 
+1

なぜこれがダウン表示されましたか? –

+3

ダウンボートして、何が間違っているのかを説明する気にならない人はイライラします。 +1。 – user225312

+0

私はdownvoteをしませんでしたが、 're.match'を使い、' re'のより適切な関数を使うことができたときにif構造を使ったので、彼らがやったと思います。 –

3

あなたのボットに複雑さを増やす予定の場合は、次のような正規表現を使うことをお勧めします:

最初に、あなたのロボットに必要な機能を定義します。

def greet_user(name): 
    print 'Hello, %s' % name 

その後、あなたはパターンやコマンドの辞書を定義します。

import re 
pattern = re.compile(r'!(?P<command>\w+)\s*(?P<args>\w*)') 
commands = {'greet': greet_user} 

は今、あなただけのユーザー入力し、適切な機能をpattern.match()を呼び出す必要があり:

m = pattern.match(string) 
commands.get(m.group('command'))(m.group('args')) 

場合ユーザーが無効なコマンドを入力すると、TypeErrorがスローされます。

commands -dictを編集するだけで、任意の機能を追加できます。

関連する問題