[英]How do I write a regex that excludes certain file suffixes?
我正在看這里給出的教程:
https://docs.python.org/2/howto/regex.html#lookahead-assertions
我想排除以.pqr.gz結尾的文件,但我不太確定該怎么做。
例如,預期的行為是:
f1.gz => succeed
f1.abc.pqr => succeed
f1.pqr.gz => fail
f1.abc.gz => succeed
我能想到的最好的正則表達式是:-
r'.*[.](?=[^.]*[.][^.]*)(?!pqr[.]gz$)[^.]*[.][^.]*$'
這不包括以.pqr.gz結尾的文件,但不允許例如僅是f1.gz的文件(即,我在上面寫的第一種情況)。
關於如何可以改善的任何想法?
編輯:-有更好的方法可以做到這一點(例如,使用string.endswith
),但是我很好奇如何僅使用正則表達式來完成此工作。
好吧,TBH,對我來說,您使用正則表達式似乎有些過頭了。 您可以簡單地執行以下操作:
if not '.pqr.gz' in line:
print(line)
並做了。
實際上,“簡單”的字符串操作僅需執行幾個簡單的操作即可完成很多工作,例如:
for line in lines:
file, result = line.split(' => ')
if file.endswith('.pqr.gz'):
print("Skipping file {}".format(file), file=sys.stderr)
continue
print(file)
# and you could do something if result == "success" there after!
當您堅持使用正則表達式執行此操作時:
這是您當前的正則表達式表示形式
這是從@rawing建議中得到啟發的解決方案:
.*(?<!\.pqr\.gz) =>
使用Python的re
模塊要注意的一件事是re.match
隱式地錨定到字符串的開頭。
另外,您可以通過轉義字串( \\.
)來匹配字面量,這可能比將其放入字符類中更容易閱讀(並且可能更快)。
對於re.match
,以下正則表達式可以解決問題:
r'.*\.pqr\.gz$'
如果改用re.search
,則可以將正則表達式縮短為:
r'\.pqr\.gz$'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.