我正在使用脚本(Python)来查找一些文件。我将文件名与正则表达式模式进行比较。现在,我必须找到以“〜”(代字号)结尾的文件,所以我构建了这个正则表达式:
if re.match("~$", string_test):
print "ok!"
嗯,Python似乎没有认识到正则表达式,我不知道为什么。我在其他语言中尝试了相同的正则表达式并且它完美地工作,任何想法?
PD:我在网上看到我必须插入
# -*- coding: utf-8 -*-
但没有帮助:(。
非常感谢,同时我会继续阅读以确定是否找到了什么。
答案 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“正则表达式”
答案 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}}(六年后!),其中添加了对换行符的文件名支持。