RF does not have a Contains keyword - only assertions like Should Contain. In this case you are better writing your own keyword for this. Building a regexp based on an unknown number and content of a list is just too painful in RF syntax. So just using evaluate to do in a user keyword what the Python keyword does. FYI namespace arg to Evaluate not available until 2.8.4, and may show in red in RIDE.
def should_contain_one_of_these_substrings(value, *substrings):
if not any(substring in value for substring in substrings):
raise AssertionError("'%s' does not contain one of: %s" % (value, substrings))
Should Contain One Of These Substrings
[Arguments] ${value} @{substrings}
${ns}= Create Dictionary substrings ${substrings} value ${value}
${contains}= Evaluate any(substring in value for substring in substrings) namespace=${ns}
Run Keyword Unless ${contains} Fail '${value}' does not contain one of: ${substrings}
Test
Should Contain One Of These Substrings abcde bc
Should Contain One Of These Substrings abcde zz de
Run Keyword And Expect Error * Should Contain One Of These Substrings abcde bb
Run Keyword And Expect Error * Should Contain One Of These Substrings asdf