[python] regular expressions

Pagina: 1
Acties:

  • yootje
  • Registratie: December 2002
  • Laatst online: 29-09 07:24
Ik ben begonnen met het volgende script, maar om de 1 of andere reden matcht-ie niet:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import random
import re

doorgaan = True

standaardantwoorden = [
["Wat is \(.*\)",
["Ik weet niet wat %1 is.",
"Weet je niet eens wat %1 is?!",
"Wil je dat echt weten?"]],
["Ik vind \(.*\)",
["Zozo.",
"Vind jij dat?",
"Ik niet."]]
]

gebruiker = map(lambda x:re.compile(x[0]),standaardantwoorden)
antwoord = map(lambda x:x[1],standaardantwoorden)

def reageren(s,gebruiker,antwoorden):
    bot_antwoord = ''
    for i in range(0,len(gebruiker)):
        print 'blaat'
        print s
        if gebruiker[i].match(s) >= 0:
            willekeurig = random.randint(0,len(standaardantwoorden[i]))
            bot_antwoord = standaardantwoorden[i][willekeurig]
    print bot_antwoord
        

    
while doorgaan == True:
    s = raw_input('Reactie:')
    reageren(s,gebruiker,antwoord)
    if s == 'stop': 
        doorgaan = False


Als ik gebruiker[i].match(s) print dan geeft hij None weer, terwijl ik toch echt "Ik vind dit" type (zonder " uiteraard). Heeft iemand een idee wat ik fout doe?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 01-12 20:19

Gerco

Professional Newbie

Probeer van je regex eens een raw string te maken. Zo dus:
Python:
1
2
3
4
5
6
7
8
9
10
standaardantwoorden = [
[r"Wat is (.*)",
[r"Ik weet niet wat %1 is.",
r"Weet je niet eens wat %1 is?!",
r"Wil je dat echt weten?"]],
[r"Ik vind (.*)",
[r"Zozo.",
r"Vind jij dat?",
r"Ik niet."]]
]


Dan hoef je je regex niet meer te escapen en heb je minder kans om daar fouten in te maken.

[ Voor 18% gewijzigd door Gerco op 17-01-2007 08:06 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Mag ik even verwijzen naar -NMe- in "[python]array replacen wil maar niet luk...", waar ik op mijn beurt weer verwijs naar onze quickstart? Ik heb je nu al twee keer eerder gevraagd om in je topicstart voldoende informatie te geven, en nu doe je het weer niet. Ik lees bijvoorbeeld nergens terug wat nou de bedoeling is dat er gematcht wordt. Ik zie wel een regexp, maar weet ik veel wat jij wil matchen? :?

Nog één keer dus: als de tip van Gerco niet werkt, breid dan eerst eens je topicstart uit. Werkt die wel, lees dan bij een volgende topicstart éérst nog eens Programming Beleid - De "quickstart" door, en op dan pas een nieuw topic, want hier kunnen we veel te weinig mee. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • yootje
  • Registratie: December 2002
  • Laatst online: 29-09 07:24
Gerco schreef op woensdag 17 januari 2007 @ 08:03:
Probeer van je regex eens een raw string te maken. Zo dus:
Python:
1
2
3
4
5
6
7
8
9
10
standaardantwoorden = [
[r"Wat is (.*)",
[r"Ik weet niet wat %1 is.",
r"Weet je niet eens wat %1 is?!",
r"Wil je dat echt weten?"]],
[r"Ik vind (.*)",
[r"Zozo.",
r"Vind jij dat?",
r"Ik niet."]]
]


Dan hoef je je regex niet meer te escapen en heb je minder kans om daar fouten in te maken.
Bedankt! Dit werkte helemaal, het enige punt is: Dat wat achter de bijvoorbeeld "Wat is" komt moet ook in het antwoord terecht komen. Voorbeeld:

Input: Wat is de lekkerste chocola
Antwoord: Ik weet niet wat de lekkerste chocola is.

Die moet dus op de plaats van %1 terecht komen. Ik heb dit grotendeels uit een ander script, maar het werkt nog niet. Dit is het voorbeeldscipt. Doe ik iets fout of werkt het gewoon fundamenteel anders dan ik doe?

  • yootje
  • Registratie: December 2002
  • Laatst online: 29-09 07:24
-NMe- schreef op woensdag 17 januari 2007 @ 10:53:
Mag ik even verwijzen naar -NMe- in "[python]array replacen wil maar niet luk...", waar ik op mijn beurt weer verwijs naar onze quickstart? Ik heb je nu al twee keer eerder gevraagd om in je topicstart voldoende informatie te geven, en nu doe je het weer niet. Ik lees bijvoorbeeld nergens terug wat nou de bedoeling is dat er gematcht wordt. Ik zie wel een regexp, maar weet ik veel wat jij wil matchen? :?

Nog één keer dus: als de tip van Gerco niet werkt, breid dan eerst eens je topicstart uit. Werkt die wel, lees dan bij een volgende topicstart éérst nog eens Programming Beleid - De "quickstart" door, en op dan pas een nieuw topic, want hier kunnen we veel te weinig mee. :)
Sorry, ik doe het echt niet expres :) Ik zal proberen duidelijker te zijn.