在 Python 中使用通配符匹配字符串的方法

目录
  • 使用通配符匹配字符串:
  • 使用正则表达式使用通配符匹配字符串

使用通配符匹配字符串:

  • 使用 fnmatch.filter() 方法从列表中获取匹配模式的字符串。
  • 使用 fnmatch.fnmatch() 方法检查字符串是否与模式匹配。
import fnmatch

a_list = ['fql.txt', 'jiyik.txt', 'com.csv']

pattern = '*.txt'
filtered_list = fnmatch.filter(a_list, pattern)
print(filtered_list)  # ️ ['fql.txt', 'jiyik.txt']

如果我们更愿意使用正则表达式,请向下滚动到下一个副标题。

fnmatch.filter 方法接受一个可迭代对象和一个模式,并返回一个新列表,该列表仅包含与提供的模式匹配的可迭代对象元素。

示例中的模式以任意一个或多个字符开头,以 .txt 结尾。

示例中的模式仅包含一个通配符,但您可以根据需要使用任意多个通配符。

请注意,星号 * 匹配所有内容(一个或多个字符)。

如果要匹配任何单个字符,请将星号 * 替换为问号 ?

  • * 匹配所有内容(一个或多个字符)
  • ? 匹配任何单个字符
  • [sequence] 匹配序列中的任意字符
  • [!sequence] 匹配任何不按顺序的字符

下面是使用问号匹配任何单个字符的示例。

import fnmatch

a_list = ['abc', 'abz', 'abxyz']

pattern = 'ab?'
filtered_list = fnmatch.filter(a_list, pattern)
print(filtered_list)  # ️ ['abc', 'abz']

该模式匹配以 ab 开头后跟任何单个字符的字符串。

如果要使用通配符检查字符串是否与模式匹配,请使用 fnmatch.fnmatch() 方法。

import fnmatch

a_string = '2023_jiyik.txt'
pattern = '2023*.txt'

matches_pattern = fnmatch.fnmatch(a_string, pattern)
print(matches_pattern)  # ️ True

if matches_pattern:
    # ️ this runs
    print('The string matches the pattern')
else:
    print('The string does NOT match the pattern')

该模式以 2023 开头,后跟任意一个或多个字符,并以 .txt 结尾。

fnmatch.fnmatch 方法接受一个字符串和一个模式作为参数。如果字符串与模式匹配,则该方法返回 True,否则返回 False。只需将星号 * 替换为问号 ? 如果您想匹配任何单个字符而不是任何一个或多个字符。

或者,我们可以使用正则表达式。

使用正则表达式使用通配符匹配字符串

使用通配符匹配字符串:

使用 re.match() 方法检查字符串是否匹配给定的模式。使用 .* 字符代替通配符。

import re

a_list = ['2023_fql.txt', '2023_jiyik.txt', '2023_com.csv']

regex = re.compile(r'2023_.*\.txt')

list_of_matches = [
    item for item in a_list
    if re.match(regex, item)
]

print(list_of_matches)  # ️ ['2023_fql.txt', '2023_jiyik.txt']

re.compile 方法将正则表达式模式编译成一个对象,该对象可用于使用其 match()search() 方法进行匹配。

这比直接使用 re.matchre.search 更有效,因为它保存并重用了正则表达式对象。

正则表达式以 2023_ 开头。

正则表达式中的 .* 字符用作匹配任何一个或多个字符的通配符。

  • . 匹配除换行符以外的任何字符。
  • 星号 * 与前面的正则表达式(点 .)匹配零次或多次。

我们使用反斜杠\字符来转义点。 在扩展名中,因为正如我们之前看到的,点 . 在正则表达式中使用时具有特殊含义。换句话说,我们使用反斜杠来处理点。 作为文字字符。

我们使用列表理解来迭代字符串列表。

列表推导用于对每个元素执行某些操作或选择满足条件的元素子集。

在每次迭代中,我们使用 re.match() 方法检查当前字符串是否与模式匹配。

import re

a_list = ['2023_fql.txt', '2023_jiyik.txt', '2023_com.csv']

regex = re.compile(r'2023_.*\.txt')

list_of_matches = [
    item for item in a_list
    if re.match(regex, item)
]

print(list_of_matches)  # ️ ['2023_fql.txt', '2023_jiyik.txt']

如果提供的正则表达式在字符串中匹配,则 re.match 方法返回一个匹配对象。

如果字符串与正则表达式模式不匹配,则 match() 方法返回 None

新列表仅包含原始列表中与模式匹配的字符串。

如果只想匹配任何单个字符,请删除点后面的星号 *. 在正则表达式中。

import re

a_list = ['2023_a.txt', '2023_bcde.txt', '2023_z.txt']

regex = re.compile(r'2023_.\.txt')

list_of_matches = [
    item for item in a_list
    if re.match(regex, item)
]

print(list_of_matches)  # ️ ['2023_a.txt', '2023_z.txt']

. 匹配除换行符以外的任何字符。

通过使用点 . 在不转义的情况下,正则表达式匹配任何以 2023_ 开头,后跟任何单个字符并以 .txt 结尾的字符串。

如果大家在阅读或编写正则表达式时需要帮助,请参考我们的正则表达式教程。

该页面包含所有特殊字符的列表以及许多有用的示例。

如果想使用正则表达式检查字符串是否与模式匹配,我们可以直接使用 re.match() 方法。

import re

a_string = '2023_fql.txt'

matches_pattern = bool(re.match(r'2023_.*\.txt', a_string))
print(matches_pattern)  # ️ True

if matches_pattern:
    # ️ this runs
    print('The string matches the pattern')
else:
    print('The string does NOT match the pattern')

如果字符串与模式匹配,则 re.match() 方法将返回一个匹配对象,如果不匹配,则返回 None

我们使用 bool() 类将结果转换为布尔值。

如果要对单个字符使用通配符,请删除星号 *

import re

a_string = '2023_ABC.txt'

matches_pattern = bool(re.match(r'2023_.\.txt', a_string))
print(matches_pattern)  # ️ False

if matches_pattern:
    print('The string matches the pattern')
else:
    # ️ this runs
    print('The string does NOT match the pattern')

请注意 ,点 . 我们没有使用反斜杠作为前缀用于匹配任何单个字符,而点 . 我们以反斜杠 \ 为前缀的被视为文字点。

示例中的字符串与模式不匹配,因此 matches_pattern 变量存储一个 False 值。

到此这篇关于在 Python 中使用通配符匹配字符串的文章就介绍到这了,更多相关Python通配符匹配字符串内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python 正则表达式匹配数字及字符串中的纯数字

    Python 正则表达式匹配数字 电话号码:\d{3}-\d{8}|\d{4}-\d{7} QQ号:[1-9][0-9]{4,} 中国邮政编码:[1-9]\d{5}(?!\d) 身份证:\d{15}|\d{18} ip地址:\d+\.\d+\.\d+\.\d+ [1-9]\d*      正整数 -[1-9]\d* 负整数 -?[1-9]\d* 整数 [1-9]\d*|0 非负整数 -[1-9]\d*|0 非正整数 [1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 正浮点数 -([1-

  • python通配符之glob模块的使用详解

    通配符是一些特殊符号,主要有星号(*)和问号(?),用来模糊搜索文件,"*"可以匹配任意个数个符号, "?"可以匹配单个字符. 当查找文件夹时,可以使用它来代替一个或多个真正字符:当不知道真正字符或者需要匹配符合一定条件的多个目标文件时,可以使用通配符代替一个或多个真正的字符. 英文 "globbing"意为统配,python在模块glob中定义了glob()函数,实现了对目录内容进行匹配的功能,glob.glob()函数接受通配模式作为输入,并

  • Python正则表达式匹配字符串中的数字

    1.使用"\d+"匹配全数字 代码: import re zen = "Arizona 479, 501, 870. Carlifornia 209, 213, 650." m = re.findall("\d+", zen) print(m) 结果: ['479', '501', '870', '209', '213', '650'] 但是上述这种方式也会引入非纯数据,例子如下: import re zen = "Arizona 47

  • python正则表达式对字符串的查找匹配

    目录 常用的RegEx基础语法 常用的RegEx函数 以下为部分示例: 总结 Python中的正则表达式要用到re模块,下面先介绍一下正则表达式需要用到的特殊字符和说明 常用的RegEx基础语法 语法 说明 \d 匹配一个数字字符 \D 匹配一个非数字字符 \s 匹配任何不可见字符(空格.制表符.换行符等) \S 匹配任何可见字符 \w 匹配任何单词字符 \W 匹配任何非单词字符 . 匹配所有字符 ^ 从字符串开头开始匹配,比如^\d表示以一个数字字符开头 $ 从字符串末尾开始匹配,比如\d$表

  • Python:通配符查找、拷贝文件的操作

    把文件夹dir1中后缀为'.jpg'的文件拷贝到文件夹dir2中: import glob import shutil import sys if __name__ == '__main__': file_names = glob.glob('dir1/*.jpg') for file_name in file_names: try: shutil.copy(file_name, 'dir2') except: print("Failed to copy file: ", sys.ex

  • python正则表达式匹配不包含某几个字符的字符串方法

    一.匹配目标 文件中所有以https?://开头,以.jpg|.png|.jpeg结尾的字符串 二.尝试过程 1) 自然想到正则表达式r'(https?://.*?.jpg|https?://.*?.png|https?://.*?.jpeg)简化书写为r'(https?://.*?\.(?:jpg|png|jpeg) 匹配结果:['http://sdsdsdadadsdsdsddsdsdawwii,https://sdsdoijcjz.jpg']发现结果并非我们想要的,仔细查看,结果中出现了,

  • Python 实用技巧之利用Shell通配符做字符串匹配

    1.需求 当工作在UNIX Shell下时,我们想使用常见的通配符模式(即:.py,Dat[0-9].csv等)来对文本做匹配. 2.解决方案 fnmatch模块提供了两个函数:fnmatch()和fnmatchcase(),可用来执行这样的匹配,使用起来非常简单. 实例: from fnmatch import fnmatch,fnmatchcase print(fnmatch('mark.txt','*.txt')) print(fnmatch('mark.txt','?ark.txt'))

  • python实现替换word中的关键文字(使用通配符)

    环境:Python3.6 本文主要是通过win32com操作word,对word中进行常用的操作.本文以替换为例,讲解一下如何使用Python在word中使用"通配符模式"(类似于正则表达式)替换文本内容. #!/usr/bin/env python # -*- coding:utf-8 -*- import os import win32com from win32com.client import Dispatch # 处理Word文档的类 class RemoteWord:  

  • 在 Python 中使用通配符匹配字符串的方法

    目录 使用通配符匹配字符串: 使用正则表达式使用通配符匹配字符串 使用通配符匹配字符串: 使用 fnmatch.filter() 方法从列表中获取匹配模式的字符串. 使用 fnmatch.fnmatch() 方法检查字符串是否与模式匹配. import fnmatch a_list = ['fql.txt', 'jiyik.txt', 'com.csv'] pattern = '*.txt' filtered_list = fnmatch.filter(a_list, pattern) prin

  • Python中几种操作字符串的方法的介绍

    #! -*- coding:utf-8 -*- import string s = 'Yes! This is a string' print '原字符串:' + s print '小写:' + s.lower() print '大写:' + s.upper() print '大小写转换:' + s.swapcase() print '首字母大写:' + s.capitalize() print '每个单词首字母大写:' + s.title() #各种对齐函数 print '左对齐:' + s.

  • Python中关于元组 集合 字符串 函数 异常处理的全面详解

    目录 元组 集合 字符串 1.字符串的驻留机制 2.常用操作 函数 1.函数的优点: 2.函数的创建:def 函数名([输入参数]) 3.函数的参数传递: 4.函数的返回值: 5.函数的参数定义: 6.变量的作用区域 7.递归函数:函数体内套用该函数本身 8.将函数存储在模块中 9.函数编写指南: Bug 1.Bug常见类型 2.常见异常类型 3.python异常处理机制 pycharm开发环境的调试 编程思想 (1)两种编程思想 (2)类和对象的创建 元组 元组是不可变序列 多任务环境下,同时

  • Python中re模块:匹配开头/结尾(^/$)

    目录 匹配开头结尾 示例1:$ 匹配分组 示例1:| 示例2:( ) 示例三:分组匹配 匹配开头结尾 字符 功能 ^ 匹配字符串开头 $ 匹配字符串结尾 示例1:$ 需求:匹配163.com的邮箱地址 email_list = [ " xiaoWang@163.com " , " xiaoWang@163.comh eihei" , ". com.xiaowang@qq.com " ] for email in email_list: ret =

  • Python中函数参数匹配模型详解

    当我们的函数接收参数为任意个,或者不能确定参数个数时,我们,可以利用 * 来定义任意数目的参数,这个函数调用时,其所有不匹配的位置参数会被赋值为元组,我们可以在函数利用循环或索引进行使用 def f(*args): # 直接打印元组参数 print(args) print('-'*20) # 循环打印元组参数 [print(i) for i in args] ... # 传递一个参数 f(1) print('='*20) # 传递5个参数 f(1, 2, 3, 4, 5) 示例结果: (1,)

  • python中for循环把字符串或者字典添加到列表的方法

    python中如何for循环把字符串添加到列表? 实例: 1.单个字符串用for循环添加到列表中: # 把L1中的字符串添加到列表alist里面 L1 = 'MJlifeBlog' alist = [] # 可以用forin来迭代L1并保存值到x变量里头即可. # 接着在for循环里边用append方法即可把解析到的单个字符添加到列表了. for x in L1: alist.append(x) print(alist) 2.多个字符串用for循环添加到列表中: # 如果需要把多个字符串添加到列

  • Python中五种实现字符串反转的方法

    目录 前言 方法1 方法2 方法3 方法4 方法5 前言 一道题目是实现一个反转字符串的函数,具体如下: 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. 我们可以假设数组中的所有字符都是 ASCII 码表中的可打印字符. 示例 1: 输入:["h","e","l","l","

  • Python实现求解括号匹配问题的方法

    本文实例讲述了Python实现求解括号匹配问题的方法.分享给大家供大家参考,具体如下: 这个在本科学习数据结构的时候已经接触很多了,主流的思想是借助栈的压入.弹出来进行匹配,至于python的话可以使用列表来完成这个操作,因为列表的append方法相当于栈的push方法,列表的pop方法相当于栈的pop方法. 主要的思路: 首先设置两个列表分别存放的是各种括号的开括号和闭括号,然后遍历给定的字符串,分如下几种情况: 1.字符串首字符出现在闭括号列表中,直接结束,输出错误 2.字符串长度不为偶数,

  • 对python中list的五种查找方法说明

    Python中是有查找功能的,五种方式:in.not in.count.index,find 前两种方法是保留字,后两种方式是列表的方法. 下面以a_list = ['a','b','c','hello'],为例作介绍: string类型的话可用find方法去查找字符串位置: a_list.find('a') 如果找到则返回第一个匹配的位置,如果没找到则返回-1,而如果通过index方法去查找的话,没找到的话会报错. 补充知识:Python中查找包含它的列表元素的索引,index报错!!! 对于

  • python中的计时器timeit的使用方法

    本文介绍了python中的计时器timeit的使用方法,分享给大家,具体如下: timeit 通常在一段程序的前后都用上time.time(),然后进行相减就可以得到一段程序的运行时间,不过python提供了更强大的计时库:timeit #导入timeit.timeit from timeit import timeit #看执行1000000次x=1的时间: timeit('x=1') #看x=1的执行时间,执行1次(number可以省略,默认值为1000000): timeit('x=1',

随机推荐