簡體   English   中英

如何使用正則表達式從路徑中提取文件名

[英]How to extract filename from path using regex

我想使用正則表達式從路徑中提取文件名:

mysting = '/content/drive/My Drive/data/happy (463).jpg'

我如何提取'happy.jpg'

我試過這個: '[^/]*$'但結果仍然包括括號中的數字,我不想要: 'happy (463).jpg'

我該如何改進它?

您可以使用 2 個捕獲組。 在第一組匹配/並捕獲組 1 中的 1+ 個單詞字符。

然后匹配括號之間的 1+ 個數字並捕獲.jpg斷言第 2 組中字符串的結尾。

^.*/(\w+)\s*\(\d+\)(\.jpg)$

在將匹配的部分

  • ^.*/匹配到最后/
  • (\\w+) Catpure組 1 ,匹配 1+ 個單詞字符
  • \\s*匹配 1+ 個空格字符
  • \\(\\d+\\)匹配括號之間的 1+ 個數字
  • (\\.jpg)捕獲組 2 ,匹配.jpg
  • $字符串結尾

正則表達式演示| Python 演示

然后在替換中使用group 1和group 2得到happy.jpg

import re

regex = r"^.*/(\w+)\s*\(\d+\)(\.jpg)$"
test_str = "/content/drive/My Drive/data/happy (463).jpg"
result = re.sub(regex,  r"\1\2", test_str, 1)

if result:
    print (result)

輸出

happy.jpg

沒有正則表達式 str方法( str.partitionstr.rpartition ):

In [185]: filename = mysting.rpartition('/')[-1] 

In [186]: filename 
Out[186]: 'happy (463).jpg'

In [187]: f"{filename.partition(' ')[0]}.{filename.rpartition('.')[-1]}"
Out[187]: 'happy.jpg'

使用正則表達式 re.sub :

re.sub(r'.*/(?!.*/)([^\s]+)[^.]+(\..*)', r'\1\2', mysting)
  • .*/貪婪地匹配到最后一個/

  • 零寬度負前瞻(?!.*/)確保沒有/在任何地方向前

  • ([^\\s]+)匹配到下一個空格並作為第一個捕獲的組

  • [^.]+匹配到 next .

  • (\\..*)匹配一個文字. 后跟任意數量的字符並作為第二個捕獲組; 如果您想更保守地匹配 3 個字符甚至文字.jpg您也可以這樣做

  • 在替換中,僅使用捕獲的組

例子:

In [183]: mysting = '/content/drive/My Drive/data/happy (463).jpg'

In [184]: re.sub(r'.*/(?!.*/)([^\s]+)[^.]+(\..*)', r'\1\2', mysting)
Out[184]: 'happy.jpg'

我使用javascript。

在 javascript 的情況下,

 const myString="happy (463).jpg"; const result=myString.replace(/\\s\\(\\d*\\)/,'');

在斜杠分隔符中拆分路徑后,您可以應用此代碼。

暫無
暫無

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

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