Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 模式匹配字符串_Python - Fatal编程技术网

Python 模式匹配字符串

Python 模式匹配字符串,python,Python,我有一个字符串数组: 输入: ["series-a-funding", "series-b-financials","series-c-funding","series-b-funding","abc-funding","raised-acd", "fund-series-a", "fund-series-b"] 我想过滤所有的字符串,这些字符串中有a系列,b系列,c系列。我的示例输出将是 ["series-a-funding", "series-b-financials","series-

我有一个字符串数组:

输入:

["series-a-funding", "series-b-financials","series-c-funding","series-b-funding","abc-funding","raised-acd", "fund-series-a", "fund-series-b"] 
我想过滤所有的字符串,这些字符串中有a系列,b系列,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新手,所以对此没有太多想法

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))]
给予

给予


我相信这样做可以:

import re

pattern = re.compile(
    '^(fund-series-[abcd]|series-[abcd]-funding|series-[abcd]-financing)$', 
    re.IGNORECASE
)

def interesting(word):
    return bool(pattern.match(word))
我们声明模式,由您的规则和提供的代码描述,然后声明函数以检查word是否与模式匹配(不区分大小写)

或者,如果您需要更多的全局系列a/b/c/d模式,则
search
可以:

pattern = re.compile('series-[abcd]', re.IGNORECASE)

def interesting(word):
    return bool(pattern.search(word))

我相信这样做可以:

import re

pattern = re.compile(
    '^(fund-series-[abcd]|series-[abcd]-funding|series-[abcd]-financing)$', 
    re.IGNORECASE
)

def interesting(word):
    return bool(pattern.match(word))
我们声明模式,由您的规则和提供的代码描述,然后声明函数以检查word是否与模式匹配(不区分大小写)

或者,如果您需要更多的全局系列a/b/c/d模式,则
search
可以:

pattern = re.compile('series-[abcd]', re.IGNORECASE)

def interesting(word):
    return bool(pattern.search(word))

此解决方案将筛选与regex
系列-[abc]
匹配的字符串:

import re
regex = re.compile('series-[abc]')
output_list = list(filter(regex.search, input_list))

表达式
过滤器(regex.search,input_list)
将函数
regex.search
应用于列表中的每个元素,并仅返回转换为
bool
时结果为
True
的元素。在匹配的情况下,
regex.search
函数返回一个
SRE_Match
对象,当转换为
bool
时,该对象的计算结果为
True
,或者在不匹配的情况下返回一个
None
,其计算结果为
False

此解决方案将筛选与正则表达式
系列-[abc]
匹配的字符串:

import re
regex = re.compile('series-[abc]')
output_list = list(filter(regex.search, input_list))

表达式
过滤器(regex.search,input_list)
将函数
regex.search
应用于列表中的每个元素,并仅返回转换为
bool
时结果为
True
的元素。在匹配的情况下,
regex.search
函数返回一个
SRE_Match
对象,当转换为
bool
时,该对象的计算结果为
True
,或者在不匹配的情况下返回一个
None
,它的计算结果为
False

您需要的是一个包含字符串和必要关键字的列表。不管是真是假。然后,您应该尝试返回列表,而不是使用
return True
return False

代码中的另一个问题是错误地使用方法
lower()
方法仅适用于字符串,不适用于列表。因此,您应该使用
textInput=text.lower()作为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)

您需要的是一个列表,其中包含带有必要关键字的字符串。不管是真是假。然后,您应该尝试返回列表,而不是使用
return True
return False

代码中的另一个问题是错误地使用方法
lower()
方法仅适用于字符串,不适用于列表。因此,您应该使用
textInput=text.lower()作为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)

我建议您对字符串使用正则表达式来检查它们是否与您的模式匹配。我建议您对字符串使用正则表达式来检查它们是否与您的模式匹配。这将找不到字符串
“fund-series-a”
“fund-series-b”
,因为
re.match
仅尝试在字符串开头找到匹配项<代码> Re.String 匹配也在中间。这将找不到字符串<代码>“Fun-Strays-“和”Fun-Strays-b“< /Cord>”,因为<代码> Re.Matals<代码>只试图在字符串的开头找到匹配。代码> RE。搜索< /代码>也在中间。如何在正则表达式中搜索特定的单词。例如,我正在寻找“appoints”这个词,我正在尝试类似这样的方法\b(?:appoints)\b但没有luckHow在regex compile中搜索特定的词。例如,我正在寻找“任命”这个词,我正在尝试这样的东西\b(?:任命)\b但没有运气