[英]Extract integer in a filename from complete path using split regex in Pandas
[英]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
$
字符串結尾然后在替換中使用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.partition
和str.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.