125

How can I check a string for substrings contained in a list, like in Check if a string contains an element from a list (of strings), but in Python?

Karl Knechtel
  • 62,466
  • 11
  • 102
  • 153
user1045620
  • 1,253
  • 2
  • 9
  • 4

1 Answers1

271

Try this test:

any(substring in string for substring in substring_list)

It will return True if any of the substrings in substring_list is contained in string.

Note that there is a Python analogue of Marc Gravell's answer in the linked question:

from itertools import imap
any(imap(string.__contains__, substring_list)) 

In Python 3, you can use map directly instead:

any(map(string.__contains__, substring_list))

Probably the above version using a generator expression is more clear though.

Alex Fortin
  • 2,105
  • 1
  • 18
  • 27
Sven Marnach
  • 574,206
  • 118
  • 941
  • 841
  • 3
    @newtover: [Generator expressions](http://docs.python.org/tutorial/classes.html#generator-expressions) don't have square brackets. – Sven Marnach Nov 14 '11 at 17:34
  • 7
    is there any way to get the substring when it will return True? – zztczcx Apr 26 '17 at 23:50
  • 13
    @vagabond You can use `next(substring for substring in substring_list if substring in string)`, which will return the first matching substring, or throw `StopIteration` if there is no match. Or use a simple loop: `for substring in substring_list: if substring in string: return substring`. – Sven Marnach May 03 '17 at 09:31
  • @SvenMarnach variable 'substring''s lifetime is DONE and unavailable in the StopIteration exception – Andrew Ward Jan 19 '23 at 17:29