使用python正则表达式匹配文件名末尾的“〜”

时间:2010-07-12 06:02:51

标签: python regex tilde

我正在使用脚本(Python)来查找一些文件。我将文件名与正则表达式模式进行比较。现在,我必须找到以“〜”(代字号)结尾的文件,所以我构建了这个正则表达式:

if re.match("~$", string_test):
    print "ok!"

嗯,Python似乎没有认识到正则表达式,我不知道为什么。我在其他语言中尝试了相同的正则表达式并且它完美地工作,任何想法?

PD:我在网上看到我必须插入

# -*- coding: utf-8 -*-

但没有帮助:(。

非常感谢,同时我会继续阅读以确定是否找到了什么。

4 个答案:

答案 0 :(得分:10)

仅当正则表达式在输入字符串的开头匹配时,

re.match()才会成功。要搜索任何子字符串,请改用re.search()

if re.search("~$", string_test):
    print "ok!"

答案 1 :(得分:9)

你的正则表达式只匹配字符串“〜”和(信不信由你)“〜\ n”。

你需要re.match(r“。*〜$”,无论如何)......这意味着零或更多(除换行之外的任何东西)后跟一个代字号后跟(字符串结束或前一行换行符)字符串的结尾)。

如果文件名可以包含换行符,请使用re.DOTALL标志并使用\ Z而不是$。

在其他语言中“工作”:您必须使用搜索功能。

r在字符串常量的开头表示原始转义例如'\ n'是换行符,但r'\ n'是两个字符,反斜杠后跟n - 也可以用'\ n'表示。原始转义在正则表达式中保存了大量\\,应该自动使用r“正则表达式”

BTW:在这种情况下避免正则表达式混淆...使用whatever.endswith('〜')

答案 2 :(得分:7)

要查找文件,请改用glob

import os
import glob

path = '/path/to/files'
os.chdir(path)
files = glob.glob('./*~')

print files

答案 3 :(得分:0)

已发布正确的正则表达式和glob解决方案。另一种选择是使用fnmatch模块:

import fnmatch
if fnmatch.fnmatch(string_test, "*~"):
    print "ok!"

这比使用正则表达式更容易一点。请注意,此处发布的所有方法都基本相同:fnmatch使用正则表达式实现,glob依次使用fnmatch

请注意,仅在2009年fnmatch已添加{{1}}(六年后!),其中添加了对换行符的文件名支持。