我在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页,并且检查字符串是否只是在行中是不够的。它需要完全匹配。
答案 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。