在字符串中搜索子串的潜在组合

时间:2017-12-18 22:46:58

标签: python python-2.7

我有stringarray包含该字符串的可能结束字符,以及要解析的文本块。例如:

stringText = "something"
endChars = [",", ".", ";", " "]
textBlock = "This string may contain something;"

在一行if语句中,我想检查textBlock是否包含stringText后面跟endChars中的任何一个any。我非常确定我可以使用Python 2.7中的内置if re.search(stringText + any(endChar in endChars), textBlock, re.IGNORECASE): print("Match") 函数来完成此操作,但到目前为止我的努力都失败了。我有类似的东西:

endChars

我已经看过this帖子,但是我很难将其应用到上面的支票上。任何帮助,将不胜感激。

修改

除了上述内容之外,是否可以确定在字符串中找到stringText = "something" endChars = [",", ".", ";", " "] textBlock = "This string may contain something;" if any((stringText + end).lower() in textBlock.lower() for end in endChars): print("Match on " + end) 中的哪一个?使用下面的@ SCB答案并对其进行调整,我希望以下内容能够做到这一点,但它会引发一个未定义的错误。

Match on ;

预期输出: NameError: name 'end' is not defined

实际输出 for end in endChars: if stringText + end in textBlock: print("Match on " + end)

更新 至少根据我的要求,我已经找到了解决这个问题的合适方案。它不是一个单行,但它完成了这项工作。为完整起见,如下所示

Result

4 个答案:

答案 0 :(得分:3)

您应该执行any()作为最外面的操作(实际上,您甚至不需要正则表达式)。

if any(stringText + end in textBlock for end in endChars):
    print("Match")

要执行不区分大小写的匹配,只需使用双方的.lower()函数:

if any((stringText + end).lower() in textBlock.lower() for end in endChars):
    print("Match")

答案 1 :(得分:1)

非正则表达式解决方案:

JObject jsonResponse = JsonConvert.DeserializeObject<JObject>(jsonResponseString);
Countries = jsonResponse["CountriesAndCities"].ToObject<List<Country>>();

正则表达式解决方案:

stringText = "something"
endChars = [",", ".", ";", " "]
textBlock = "This string may contain something;"
if any((stringText+i in textBlock for i in endChars):
   #condition met
   pass

答案 2 :(得分:0)

A solution using any() and map built-ins:

stringText = "something"
endChars = [",", ".", ";", " "]
textBlock = "This string may contain something;"

if any(map(textBlock.endswith, [stringText, *endChars])):
    print("Match")
  • [stringText, *endChars] is the list of all possible endings.
  • map() maps each element of that list to the method textBlock.endswith()
  • any() returns True is any of the elements of map() is True

答案 3 :(得分:0)

testBlock.endswith(tuple([stringText + endChar for endChar in endChars]))