Python:打印整个字符串匹配行,并且在句号后不中断

时间:2019-03-15 05:26:17

标签: python-3.x

有关我提出的解决方案,请参见底部。

希望这对你们来说是一个简单的问题。尝试将字符串匹配到列表并仅打印匹配的字符串。我成功使用了re,但是在这段时间之后它切断了其余的字符串。每re的范围是0.10,当我不使用re来查看输出时,它是0.14,而不是0.10,因此match在该时间段后切断了信息。因此,我想学习如何告诉它打印整个范围,或学习一种将var字符串与列表匹配并打印该确切字符串的新方法。我最初的尝试打印了任何带有TESTPR的内容,总共打印了3个,其他我不想打印的内容在前面都带有1,最后一场比赛在最后带有附加R。这是我当前的匹配代码:

#OLD See below
for element in catalog:
    z = re.match("((TESTPRR )\w+)", element)
    if z:
        print((z.group()))

Output: TESTPR 105

它应该显示:

Wanted output: TESTPT 105.465

句点后最多可以保留小数点后三位。我目前正在上一门Python课,以学习Python并热爱它,但由于我刚刚在课堂上还没有读到关于重新匹配的知识,我刚刚为此感到难过。

我乐于学习另一种搜索和匹配字符串并仅打印该字符串的方法。对于我第一次打印出3个结果的尝试是:

catalog = [ long list pulled from API then code here to make it a nice column]
prod = 'TESTPR'
print ([s for s in catalog if prod in s])

当我在产品末尾添加一个空格时,我可以摆脱结尾处带有多余字符的匹配,但是我无法添加一个空格来对前面具有多余字符的匹配做同样的事情。这是上面的代码,而不是重新匹配的代码。谢谢!

下面的答案!

2 个答案:

答案 0 :(得分:0)

由于您有兴趣学习匹配字符串和解决问题的方法,请尝试fuzzywuzzy

您可以尝试以下方法:

from fuzzywuzzy import process

catalog = [long list pulled from API then code here to make it a nice column]
prod = "TESTPR"
hit = process.extractOne(prod, catalog, score_cutoff = 75) #you can adjust this to suit how close the match should be
print(hit[0]) #hit will be sth like ("TESTPT 105.465", 75)

Output: TESTPT 105.465

有关使用模糊模糊的不同方式的信息,请查看this link

您可以使用不同的匹配方式,例如:

fuzz.partial_ratio
fuzz.ratio
token_sort_ratio
fuzz.token_set_ratio

为此,来自模糊模糊导入模糊测试

答案 1 :(得分:0)

使用re.match进行处理,并获得正确的正则表达式,这样可以打印出整个匹配,并且在该时间段后不会中断数字。

如上所示,

我的原始匹配是re.match(“(((TESTPRR)\ w +)”,element),一些(不需要,需要添加一些表达式,现在它打印正确的匹配。有关旧代码,请参见上文,有关新代码,请参见下文。

# New code, replaced w+ with w*\d*[.,]?\d*$
for element in catalog:
    z = re.match("STRING\w*\d*[.,]?\d*$", element)
    if z:
        print(z.group())