簡體   English   中英

在文件名末尾使用Python正則表達式匹配“〜”

[英]Matching “~” at the end of a filename with a python regular expression

我正在使用腳本(Python)查找一些文件。 我將文件名與正則表達式模式進行比較。 現在,我必須找到以“〜”(波浪號)結尾的文件,因此我構建了此正則表達式:

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

好吧,Python似乎無法識別正則表達式,我不知道為什么。 我在其他語言中嘗試了相同的正則表達式,並且效果很好,對嗎?

PD:我在網上閱讀了必須插入的內容

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

但沒有幫助:(。

非常感謝,與此同時,我將繼續閱讀以查找是否有任何東西。

僅當正則表達式在輸入字符串的開頭匹配時, re.match()才成功。 要搜索任何子字符串,請改用re.search()

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

您的正則表達式僅匹配字符串“〜”和(信不信由你)“〜\\ n”。

您需要re.match(r“。*〜$”,等等)...表示零或多個(換行符除外),后跟一個代字號,然后是(字符串結尾或換行符在結尾之前)串)。

萬一文件名可能包含換行符,請使用re.DOTALL標志並使用\\ Z代替$。

其他語言的“有效”:您必須已使用搜索功能。

字符串常量開頭的r表示原始轉義,例如'\\ n'是換行符,而r'\\ n'是兩個字符,反斜杠后跟n-也可以由'\\ n'表示。 原始轉義在正則表達式中節省了很多\\\\ ,應該自動使用r“ regex”

順便說一句:在這種情況下, 避免正則表達式混淆...使用what.endswith('〜')

要查找文件,請改用glob

import os
import glob

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

print files

正確的正則表達式和glob解決方案已經發布。 另一個選擇是使用fnmatch模塊:

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

這比使用正則表達式要容易一點。 請注意,這里發布的所有方法本質上是等效的: fnmatch是使用正則表達式實現的,而glob反過來是使用fnmatch

請注意,僅在2009年(六年后!)向fnmatch添加了補丁 ,該補丁增加了對帶有換行符的文件名的支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM