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但没有运气