[Tutor] miniwiki 1.3 BETA bugs

Kirk Bailey deliberatus at verizon.net
Mon Feb 26 20:46:09 CET 2007


ok, when I have some time to do some coding I will work on trying this. 
AS is, it is pretty cleaned up, b utg making it less hairy and more 
definate in it's execution is a Great Good Thing(tm).

If the project intrests you I will sip up the current version and leave 
it on my domain so you can find it. when it is on the4re I will post a 
link on the list. this may take 2 days, I am being rather busy right now.

Barnaby Scott wrote:
> Kirk Z Bailey wrote:
>> RE leaves me totally confuzzzeddded. Yep, so confuised I'm having 
>> trouble spelling it. Sp this one line will replace both words and give 
>> a reliable result?
>>
>> Barnaby Scott wrote:
>> [snip]
>>> No idea if it has anything to do with your problem, but it struck me 
>>> that the iswikiword() function (and processword() which seems to be a 
>>> helper for it) could be replaced with one line, and it would be 
>>> reliable!
>>>
>>> def iswikiword(word):
>>>         return bool(re.match('^([A-Z][a-z]+){2,}$', word))
>>>
>>> Of course you need to import re, but that seems a small price to pay!
>>>
>>> HTH
>>>
>>> Barnaby Scott
>>>
>>>
>>
> 
> As far as I know this is 100% reliable - at least it works for me 
> (www.waywood.co.uk/MonkeyWiki/). I suggest you test the function to your 
> own satisfaction - feed it tricky 'possible' WikiWords, and see how it 
> does!
> 
> I know what you mean - RE syntax is an unruly beast to try and wrestle 
> with, but I *so* glad I made the effort. I don't claim to be anything 
> like an expert, but I now find it very useful indeed.
> 
> Here's how the function's statement works in case you're interested:
> 
> bool(re.match('^([A-Z][a-z]+){2,}$', word))
> 
> re.match() will look for a match for us, according to the RE given as
> the first argument, and the string you want to match against as the second
> 
> ^ means we demand that the pattern matches from the beginning of the 
> string to be tested - we don't want to say yes to 
> anEmbeddedWikiWordLikeThis. (In fact because we are using re.match 
> instead of re.search this is not strictly necessary, but makes it clearer)
> 
> ([A-Z][a-z]+) means we want a group of letters, starting with a one in 
> the range [A-Z] i.e. a capital, followed by [a-z]+ , meaning one or more 
> lowercase letters ('one or more' is specified by the +). That whole 
> pattern is parenthesised because we want the next element to refer to 
> the whole thing
> 
> {2,} means we want a match only if our preceding pattern (i.e. a 
> capitalised word) occurs a minimum of 2 times in a row, and a maximum of 
> - well, we don't want to specify a maximum, so we leave it out. 
> (YouMightInFactWantToSpecifyTheMaximumNumberOfWordsThatAreAllowedToAppearInYourWikiLinksToStopPeopleDoingSillyThingsLikeThis). 
> 
> 
> $ means we want a match only if the pattern reaches the end of the test 
> string - i.e. we don't want to match a WordLikeThis62734.
> 
> As for bool() - nothing to do with RE, but if a match occurs, the result 
> returned by re.match() is a MatchObject instance, otherwise None. I have 
> used bool() to convert these two possible results into True or False 
> though I guess this is not strictly necessary - the truth testing would 
> happen implicitly outside the function anyway. However it seems right to 
> return a boolean if that's what the function's obvious intent is.
> 
> HTH
> 
> 
> Barnaby Scott
> 
> 
> 
> 
> 
> 
> 
> 
> 

-- 
Salute!
	-Kirk Bailey
           Think
          +-----+
          | BOX |
          +-----+
           knihT

Fnord.


More information about the Tutor mailing list