0

我在 Python 中匹配字符串时遇到问题。我要做的是在这样的文档中查找行,尝试将每一行与特定的短语匹配。我正在阅读所有行并将 Beautfiul 汤解析为剥离的字符串,然后遍历文档中所有行的列表。从那里,我使用以下代码来匹配特定的字符串:

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 中是如何工作的,这些事件是如何发生的,我该如何修复它以便它能够生成这些精确的短语?

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

4

2 回答 2

2

这个怎么样,

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'.

>>> ("AUDIT COMMITTEE REPORT" or "REPORT OF THE AUDIT COMMITTEE")
'AUDIT COMMITTEE REPORT'
于 2016-06-03T14:42:39.333 回答
1

你可以使用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

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

于 2016-06-03T14:48:37.237 回答