2010-12-12 2 views
2

문자열에 무엇이 있는지 모르는 문자열을 찾는 방법을 궁금합니다. 나는 IRC 봇을 쓰고 있는데이 기능이 필요하다. 내가 쓸 수 있도록하려면 :파이썬의 문자열에서 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}!'format (command [7 :]. strip())' – user225312

-1

인사에서 "그렉"경우 : 해봐요 ("안녕 그렉")

키가 문자열이 (가) 연산자

+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

downvote 및 잘못 설명하는 의견을 남겨 두지 않는 사람들은 좌절입니다. +1. – user225312

+0

나는 downvote를하지 않았지만,'re.match'를 사용한 다음에 if 구조를 사용했기 때문에 그들이're'에서 더 적절한 함수를 사용할 수 있었을 때 그것을했을 것이라고 상상합니다. –

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를 편집하여 모든 기능을 추가 할 수 있습니다.

관련 문제