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。
我无法匹配 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。