Python中的字符串匹配?

时间:2016-06-03 14:39:36

标签: python string python-3.x string-matching edgar

我在Python中匹配字符串时遇到问题。我要做的是在this等文档中查找行,并尝试将每行匹配到特定的短语。我正在阅读所有的行并用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中工作,s.t。这些事件正在发生,我该如何修复它以便它会制作那些确切的短语?

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

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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。