2010-12-12 7 views
2

Ich fragte mich, wie man eine Zeichenfolge, die Sie nicht wissen, was ist, in einer Zeichenfolge suchen. Ich schreibe einen IRC-Bot und ich brauche diese Funktion. Ich möchte schreiben können:Wie finde ich x in einer Zeichenfolge in Python

begrüßen Greg

und dann wird mein Bot sagen soll! „Hallo, Greg!“. Was danach kommt, ist variabel. Und wenn ich schrieb, grüße Matthew würde es sagen "Hi, Matthew!". Ist das möglich?

Vielen Dank.

Andesay

+1

Warum die down vote? –

+0

Ich denke, weil die Frage unklar ist. (Es war nicht ich) +0 –

+1

Sie erkennen, dass, wenn das nicht wirklich einfach bleibt, müssen Sie einen echten Parser bauen? – delnan

Antwort

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

Zu welchem ​​Modul gehört ein Teil? Es sagt, Put ist nicht definiert, wenn ich das Codebeispiel ausprobieren .. – Andesay

+0

müssen Sie ändern, um eine Funktion, die eine msg sendet setzen. Put ist nur eine Beispielfunktion. –

+1

@Andesay: 'print 'Hallo, {0}!'. Format (Befehl [7:]. Strip())' – user225312

-1

wenn "Greg" in greet: doSomething ("Hallo Greg")

der Schlüssel ist, dass Strings nehmen die in Operator

+1

Danke für die schnelle Antwort, aber was wäre, wenn ich keine Ahnung hätte, welcher Name dort steht? – Andesay

1

Es ist ganz einfach:

>>> 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

Warum wurde das heruntergeregelt? –

+3

Leute, die ablehnen und sich nicht die Mühe machen, einen Kommentar zu hinterlassen, der erklärt, was falsch ist, sind frustrierend. +1 obwohl. – user225312

+0

Ich habe nicht downvote, aber ich stelle mir vor, sie haben es getan, weil Sie 're.match' und dann ein if-Konstrukt verwendet haben, wenn Sie eine passendere Funktion von' re' hätten verwenden können. –

3

Wenn Sie Ihrem Bot mehr Komplexität hinzufügen möchten, würde ich Ihnen folgende reguläre Ausdrücke vorschlagen:

Zuerst definieren Sie die Funktionen, die Ihr Bot benötigen könnte.

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

Dann definieren Sie das Muster und ein dict von Befehlen:

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

Jetzt haben Sie nur pattern.match() mit der Benutzereingabe aufrufen und die entsprechende Funktion:

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

Wenn ein Benutzer gibt einen ungültigen Befehl ein, ein TypeError wird ausgelöst.

Jetzt können Sie jede Funktion nur durch Bearbeiten der commands -dict hinzufügen.

Verwandte Themen