模式匹配字符串

时间:2018-12-12 09:38:36

标签: python

我有一个字符串数组:

输入:

["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的新手,所以对此没有太多想法。

4 个答案:

答案 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 Truereturn 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)