验证字符串中是否存在所有字符序列(Python 2+)

时间:2016-07-27 03:08:39

标签: python regex

因此,要使用python验证字符串是另一个字符串的子集,您可以使用set/frozensets类和issubset方法 - 仅适用于单个字符,或者您可以使用正则表达式,从一开始就基本上是多个前瞻断言。我想使用正则表达式选项。

不按照下面的方式进行操作(使用遍历字符串并手动进行前瞻断言,这可能会产生一个巨大的字符串,给定我将要处理的大数据,是否有另一种方法可以更简洁/直接地构建此前瞻 - 前进的方式?另一个项目是我不会只使用单个字符。所以前瞻断言所需的数量可能会非常大。

import re

userInput = raw_input()
listOfChars = 'asdfgei'

myRegexString = ''
for i in listOfChars:
    myRegexString = myRegexString+'(?=.*'+i+')'
    myRegexCompiled = re.compile(myRegexString)
if myRegexCompiled.(userInput):
    print True

2 个答案:

答案 0 :(得分:3)

如果要验证集合中的所有字符序列是否都存在于给定字符串中,请将all()与生成器表达式一起使用:

answer = all(word in string for word in bag)

答案 1 :(得分:0)

因此,假设您有两个字符串 - userInput,可能非常大,而listOfChars则相对较小。您想检查listOfChars中是否存在userInput的每个元素,而不将userInput转换为set

没有必要为此使用正则表达式 - 这样做会更快:

userInput = raw_input()
listOfChars = 'asdfgei'

def containsSubset(large, small):
   for element in set(small): # Convert to a set to remove dupes
       if not large.contains(element):
           return False
   return True

return containsSubset(userInput, listOfChars)

这将是O(M * N),其中M是userInput的大小,N是listOfChars的大小。