我有string
,array
包含该字符串的可能结束字符,以及要解析的文本块。例如:
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
答案 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]))