我有一个字符串数组:
输入:
["series-a-funding", "series-b-financials","series-c-funding","series-b-funding","abc-funding","raised-acd", "fund-series-a", "fund-series-b"]
,我想过滤所有在字符串中具有series-a,series-b,series-c的字符串。我的示例输出将是
["series-a-funding", "series-b-financials","series-c-funding","series-b-funding","fund-series-a", "fund-series-b"]
我已经尝试过类似的事情
def interesting(textInput):
textInput = textInput.lower()
if any([word in textInput for word in ['fund-series-%s' or 'series-%s-funding' or 'series-%s-financing' %i for i in ['a', 'b', 'c', 'd']]]):
return True
return False
但是没有运气。谁能帮我这个。我是python的新手,所以对此没有太多想法。
答案 0 :(得分:1)
我相信这可以做到:
/file
我们声明由您的规则和您提供的代码描述的模式,然后声明函数以检查单词是否与模式匹配(不区分大小写)
或者,如果您需要更多的全局 series-a / b / c / d 模式,那么/file.html
可以做到:
import re
pattern = re.compile(
'^(fund-series-[abcd]|series-[abcd]-funding|series-[abcd]-financing)$',
re.IGNORECASE
)
def interesting(word):
return bool(pattern.match(word))
答案 1 :(得分:1)
此解决方案将过滤与正则表达式series-[abc]
匹配的字符串:
import re
regex = re.compile('series-[abc]')
output_list = list(filter(regex.search, input_list))
表达式filter(regex.search, input_list)
将函数regex.search
应用于列表中的每个元素,并仅返回转换为True
时结果为bool
的那些元素。我们利用regex.search
函数在匹配的情况下返回SRE_Match
对象的事实,当转换为True
或{{1 }}(如果不匹配,其值为bool
。
答案 2 :(得分:0)
import re
s = ["series-a-funding", "series-b-financials","series-c-funding","series-b-funding","abc-funding","raised-acd", "fund-series-a", "fund-series-b"]
[i for i in s if bool(re.match(r"series-['a','b','c']+", i))]
给予
['series-a-funding', 'series-b-financials', 'series-c-funding', 'series-b-funding']
答案 3 :(得分:0)
您想要的是一个包含带有必要关键字的字符串的列表。不管它们是对还是错。然后,应该尝试返回列表,而不是使用return True
或return False
。
您的代码中的另一个问题是使用方法不正确。 lower ()
方法仅适用于字符串,不适用于列表。因此,您应该使用textInput = text.lower() for text in textInput
此外,您还想返回真实的字符串。不是小写的克隆。因此,建议不要在函数开头将原始列表转换为小写。相反,您可以在比较时而不是在开头将每个字符串都小写。
这是我编写的一个简单程序:
textList = ["series-a-funding", "series-b-financials","series-c-funding","series-b-funding","abc-funding","raised-acd", "fund-series-a", "fund-series-b"]
def printStrings (strings):
return [string for string in textList if 'series-a' in string.lower () or 'series-b' in string.lower () or 'series-c' in string.lower ()]
print printStrings (strings)