Regular Expressions: large amount of or's
jstroud at mbi.ucla.edu
Tue Mar 1 21:06:39 CET 2005
This does not sound like a job for a single regex.
Using a list and listcomp (say your words are in a list called "mywordlist")
you can make this quite terse. Of course I have a way of writing algorithms
that have very large exp when people tell me the O(N^exp).
myregexlist = [re.compile(aword) for aword in mywordlist]
myoccurrences = [argx.findall(some_string) for argx in myregexlist]
Now you should have a 1:1 mapping of the mywordlist and myoccurrences. Of
course you can fill mywordlist with real regular expressions instead of just
words. If you want to count the words, you may just want to use the string
myoccurrences = [some_string.count(aword) for aword in mywordlist]
This may make more sense if you are not using true regexes.
On Tuesday 01 March 2005 11:46 am, André Søreng wrote:
> Given a string, I want to find all ocurrences of
> certain predefined words in that string. Problem is, the list of
> words that should be detected can be in the order of thousands.
> With the re module, this can be solved something like this:
> import re
> r = re.compile("word1|word2|word3|.......|wordN")
> Unfortunately, when having more than about 10 000 words in
> the regexp, I get a regular expression runtime error when
> trying to execute the findall function (compile works fine, but slow).
> I don't know if using the re module is the right solution here, any
> suggestions on alternative solutions or data structures which could
> be used to solve the problem?
James Stroud, Ph.D.
UCLA-DOE Institute for Genomics and Proteomics
Los Angeles, CA 90095
More information about the Python-list