Python中的字符串匹配?

2024-09-27 00:18:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中无法匹配字符串。我要做的是在文档中查找this中的行,并尝试将每一行与特定的短语相匹配。我读取所有的行,并用Beautfiul soup解析为剥离字符串,然后遍历文档中所有行的列表。在此基础上,我使用以下代码来匹配特定字符串:

if row.upper() == ("AUDIT COMMITTEE REPORT" or "REPORT OF THE AUDIT COMMITTEE"):
    print("Found it!")
if "REPORT" in row.upper():
    print ("******"+row.upper()+"******")

当代码运行时,我得到以下输出:

^{2}$

当检查字符串的相等性时,程序永远找不到它,但是当询问它的一部分是否在字符串中时,它可以毫不费力地找到它。字符串匹配是如何在Python,s.t.中工作的?这些事件正在发生,我如何修复它,使它能够生成那些精确的短语?在

编辑:另一个需要注意的是,这些文档非常大,有些文档很容易超过50页,检查字符串是否正好在行中是不够的。它需要完全匹配。在


Tags: or字符串代码文档report列表ifaudit
2条回答

您可以使用list comprehension执行类似的操作。在

row = '******AUDIT COMMITTEE REPORT******'
match = ["AUDIT COMMITTEE REPORT", "REPORT OF THE AUDIT COMMITTEE"]
is_match = sum([m in row.upper() for m in match])

if is_match:
    print("Found it!")
if "REPORT" in row.upper():
    print ("******"+row.upper()+"******")

首先,我们创建所有可能匹配项的列表,这些匹配项可以从文件中加载,也可以在python代码中静态声明。在

^{pr2}$

接下来,我们遍历所有可能的匹配项,看看是否有匹配字符串row。如果有匹配项,则会向列表中添加一个真正的布尔值,我们可以使用它来确定是否存在匹配项。在

is_match = sum([m in row.upper() for m in match])

如果删除sum(),您可以看到list comprehension的输出只是布尔值的列表。在

print([m in row.upper() for m in match])
[True, False]

如果你想更高效、更简单,你可以用for循环实现一个函数。在

matches = ["AUDIT COMMITTEE REPORT", "REPORT OF THE AUDIT COMMITTEE"]
def is_match(row):
    for match in matches:
        if match in row.upper():
            return True
    return False

这个循环将循环所有可能的匹配项,如果找到匹配项,它将立即返回True,否则将退出并返回False。在

这个怎么样

if row.upper() in ("AUDIT COMMITTEE REPORT", "REPORT OF THE AUDIT COMMITTEE"):
    print("Found it!")
if "REPORT" in row.upper():
    print ("******"+row.upper()+"******")

注意,("str1" or "str2")返回第一个字符串,即'str1'。在

^{pr2}$

相关问题 更多 >

    热门问题