Python 中的字符串匹配?

String Matching in 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()+"******")

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

******COMPENSATION COMMITTEE REPORT******
******REPORT OF THE AUDIT COMMITTEE******
******REPORTING COMPLIANE******
******COMPENSATION COMMITTEE REPORT******
******REPORT OF THE AUDIT COMMITTEE******

程序在检查字符串是否相等时从未找到它,但当询问它的一部分是否在字符串中时,它能够毫不费力地找到它。 Python、s.t 中的字符串匹配是如何工作的?这些事件正在发生,我怎样才能修复它以便它能准确地表达出这些短语?

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

这个怎么样,

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") returns 第一个字符串,即 'str1'.

>>> ("AUDIT COMMITTEE REPORT" or "REPORT OF THE AUDIT COMMITTEE")
'AUDIT COMMITTEE REPORT'

您可以使用 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 代码中静态声明。

match = ["AUDIT COMMITTEE REPORT", "REPORT OF THE AUDIT COMMITTEE"]

接下来我们遍历所有可能的匹配项,看看是否有任何匹配字符串 row。如果确实匹配,一个 True 布尔值将被添加到列表中,我们可以使用它来确定是否匹配。

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

如果删除 sum(),您会看到列表理解的输出只是一个布尔值列表。

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

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