문자열에 무엇이 있는지 모르는 문자열을 찾는 방법을 궁금합니다. 나는 IRC 봇을 쓰고 있는데이 기능이 필요하다. 내가 쓸 수 있도록하려면 :파이썬의 문자열에서 x를 찾는 방법
을
그렉
을 맞이하고 내 봇이 말을 생각한다! "안녕, 그렉!". 따라서 인사를 한 후에 오는 것은 가변적입니다. 그리고 내가 쓴다면 매튜에게 인사해라. "안녕, 매튜!"라고 말할 것입니다. 이것이 가능합니까?고마워요.
Andesay
문자열에 무엇이 있는지 모르는 문자열을 찾는 방법을 궁금합니다. 나는 IRC 봇을 쓰고 있는데이 기능이 필요하다. 내가 쓸 수 있도록하려면 :파이썬의 문자열에서 x를 찾는 방법
을
그렉
을 맞이하고 내 봇이 말을 생각한다! "안녕, 그렉!". 따라서 인사를 한 후에 오는 것은 가변적입니다. 그리고 내가 쓴다면 매튜에게 인사해라. "안녕, 매튜!"라고 말할 것입니다. 이것이 가능합니까?고마워요.
Andesay
if command.lower().startswith('!greet '):
put('Hi, ' + command[7:].strip() + '!')
'!greet Greg' -> [ put()s 'Greg' ]
'!Greet Fred ' -> [ put()s 'Fred' ]
'!hello John' -> [ nothing ]
일부 모듈은 어떤 모듈에 포함됩니까? 그것은 코드 샘플을 시도 할 때 put이 정의되어 있지 않다는 것을 말합니다. – Andesay
msg를 보내는 함수로 put을 변경해야합니다. put은 예제 함수이다. –
@Andesay :'print '안녕하세요, {0}!'format (command [7 :]. strip())' – user225312
인사에서 "그렉"경우 : 해봐요 ("안녕 그렉")
키가 문자열이 (가) 연산자
빠른 답변 주셔서 감사합니다!하지만 어떤 이름을 넣을지 모르면 어떻게 될까요? – Andesay
그것은 간단 걸릴 것입니다 :
>>> import re
>>> m = re.search(r"!greet (?P<name>.+)", "!greet Someone")
>>> m.group("name")
'Someone'
import re
...
input = '!greet Greg'
m = re.match(r'!greet\s+(.*)', input)
if m:
print 'Hi, %s!' % m.group(1)
왜 이것을 다운 그레이드 했습니까? –
downvote 및 잘못 설명하는 의견을 남겨 두지 않는 사람들은 좌절입니다. +1. – user225312
나는 downvote를하지 않았지만,'re.match'를 사용한 다음에 if 구조를 사용했기 때문에 그들이're'에서 더 적절한 함수를 사용할 수 있었을 때 그것을했을 것이라고 상상합니다. –
봇에 복잡성을 추가하려는 경우 다음과 같은 정규식을 사용하는 것이 좋습니다.
처음에는 봇에 필요할 수있는 기능을 정의합니다.
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를 편집하여 모든 기능을 추가 할 수 있습니다.
왜 아래 표를 보냅니 까? –
질문이 불분명하기 때문에 나는 추측한다. (그것은 내가 아니 었습니다) +0 –
이것이 정말 간단하지 않다면 실제 파서를 만들어야한다는 것을 알고 있습니까? – delnan