如何在Python中匹配字符串开头或结尾的文本?
阅读更多:Python 教程
问题。
假设您需要检查特定文本模式的字符串开头或结尾。常见的模式可能是文件名扩展名,但也可以是任何内容。我将向您展示如何使用几种方法来完成此操作。
startswith()方法
检查字符串开始的简单方法是使用startswith()方法。
示例
text = "美国比澳大利亚冷吗?"
print(f"output \n {text.startswith('Is')}")
输出
True
示例
filename = "Hello_world.txt"
print(f"output \n {filename.startswith('Hello')}")
输出
True
示例
site_url = 'https://www.something.com'
print(f"output \n {site_url.startswith('http:')}")
输出
False
示例
print(f"output \n {site_url.startswith('https:')}")
输出
True
endswith()方法
检查字符串结尾的简单方法是使用endswith()方法。
示例
text = "美国比澳大利亚冷吗?"
print(f"output \n {text.endswith('?')}")
输出
True
示例
filename = "Hello_world.txt"
print(f"output \n {filename.endswith('.txt')}")
输出
True
现在,如果我们要使用上述方法检查多个选择,我们需要提供元组。其中一种常见用法是检查目录中的“.txt”和“.csv”文件。
import os
filenames = os.listdir('.')
# 首先检查是否存在文件
print(f"output \n {any(name.endswith(('.csv',',txt')) for name in filenames)}")
输出
True
输出
[name for name in filenames if name.endswith(('.csv', '.txt')) ]
输出
['file1.csv',
'HRDataset.csv',
'Input.csv',
'input.txt',
'input_copy.txt',
'movies_data.csv',
'my_html_data_to_csv.csv',
'temporary_file1_for_zip.csv',
'temporary_file2_for_zip.csv',
'test.csv',
'test1.txt',
'test2.txt',
'tmdb_5000_movies.csv']
请注意,这些方法接受元组。如果您有要搜索的选择列表,则需要将它们转换为元组。
import os
# 文件扩展名列表
patters = ['.csv','.txt']
# 获取文件名
filenames = os.listdir('.')
# 首先检查是否存在文件
any(name.endswith(patters) for name in filenames)
输出
---------------------------------------------------------------------------
TypeError Traceback (most recent call last):
in
8
9 # 首先检查是否存在文件
---> 10 any(name.endswith(patters) for name in filenames)
in (.0)
8
9 # 首先检查是否存在文件
---> 10 any(name.endswith(patters) for name in filenames)
TypeError: endswith first arg must be str or a tuple of str, not list
上面的命令返回了一个错误,因此我们需要将列表转换为元组。
示例
# 首先检查是否存在文件
any(name.endswith(tuple(patters)) for name in filenames)
输出
True
同样地,我们需要将列表转换为元组以获取文件名。
示例
[name for name in filenames if name.endswith(tuple(patters)) ]
输出
['file1.csv',
'HRDataset.csv',
'Input.csv',
'input.txt',
'input_copy.txt',
'movies_data.csv',
'my_html_data_to_csv.csv',
'temporary_file1_for_zip.csv',
'temporary_file2_for_zip.csv',
'test.csv',
'test1.txt',
'test2.txt',
'tmdb_5000_movies.csv']
最后,startswith() 和 endswith() 方法与其他操作结合使用时,看起来非常好,比如常见的数据缩减。例如:
例子
if any(name.endswith(tuple(patters)) for name in filenames):
<执行逻辑>