刪除文件名後綴的正則表達式是什麼?例如,如果我在諸如「vnb.txt」的字符串中有文件名,那麼刪除「.txt」的正則表達式是什麼? 謝謝。刪除後綴的正則表達式
回答
不同的操作系統可能允許filenams中的不同字符,最簡單的正則表達式可能是(.+)\.txt$
。獲取第一個捕獲組以獲取文件名sans擴展名。
要匹配任何文件擴展名,不只是'.txt',請使用'(。+)\。([^ \。] +)'(如果不匹配,則文件名無擴展名) – 2011-03-29 19:47:28
@ Felix Dombek:您還需要能夠處理文件名,例如'ENV1.20110329.dat' ......我認爲您的模式可以捕獲ENV1和20110329,但不會得到文件擴展名「.dat」。 – FrustratedWithFormsDesigner 2011-03-29 20:02:20
不,如果第一個捕獲組未被指定爲不情願('(\。+?)')。但是如果你想確定,你當然可以使用'^'和'$':完整的正則表達式是'^(。+)\。([^ \。] +)$' – 2011-03-30 11:11:21
你真的需要一個正則表達式來做到這一點嗎?爲什麼不只是查找字符串中的最後一個時間段,並將字符串修剪到該點?坦率地說,正則表達式有很多開銷,在這種情況下我不認爲你需要它。
正如tstenner建議,可以嘗試以下操作之一,這取決於你使用的是什麼類型的字符串:
第一個例子:
char* str = "Directory/file.txt";
size_t index;
char* pStr = strrchr(str,'.');
if(nullptr != pStr)
{
index = pStr - str;
}
第二個例子:
int index = string("Directory/file.txt").find_last_of('.');
如果您正在尋找能夠爲您提供除後綴以外的任何解決方案的解決方案,則應使用string::find_last_of。
您的代碼看起來是這樣的:
const std::string removesuffix(const std::string& s) {
size_t suffixbegin = s.find_last_of('.');
//This will handle cases like "directory.foo/bar"
size_t dir = s.find_last_of('/');
if(dir != std::string::npos && dir > suffixbegin) return s;
if(suffixbegin == std::string::npos) return s;
else return s.substr(0,suffixbegin);
}
如果你正在尋找一個正則表達式,使用\.[^.]+$
。
你必須逃避第一個.
,否則它將匹配任何字符,並在最後放置一個$,所以它只會匹配一個字符串的末尾。
如果您已經使用Qt,您可以使用QFileInfo,並使用baseName()功能得到公正的名稱(如果存在的話),或者suffix()功能得到擴展名(如果存在的話)。
- 1. Java正則表達式前綴後綴
- 2. 正則表達式來刪除文件路徑後綴
- 3. 前綴排除的正則表達式
- 4. Java的正則表達式後綴
- 5. 正則表達式,負後綴
- 6. 正則表達式:後綴驗證
- 7. 後綴header_checks在正則表達式
- 8. python正則表達式後綴匹配
- 9. Python的正則表達式刪除Word用正則表達式
- 10. 正則表達式如何找到「unconsecutive後綴」的後綴
- 11. 正則表達式驗證前綴,中綴和後綴表達式
- 12. 刪除。*正則表達式打破正則表達式
- 13. .NET正則表達式,排除匹配中的可選後綴
- 14. ruby正則表達式用於刪除url前綴並結束
- 15. 正則表達式刪除除
- 16. Notepad ++正則表達式刪除樣式
- 17. 刪除鏈接的正則表達式
- 18. Java的正則表達式刪除 「/*....*/」 和 「{} .....」
- 19. 刪除列表中的正則表達式與Python中的正則表達式
- 20. 正則表達式前綴和後綴可選
- 21. 從Excel刪除單詞中的某些前綴的正則表達式模式
- 22. Ruby正則表達式刪除空間
- 23. ANT刪除空格正則表達式
- 24. 使用正則表達式刪除HTML
- 25. 正則表達式刪除無標記
- 26. 刪除長詞正則表達式
- 27. C#正則表達式刪除行
- 28. 正則表達式刪除括號
- 29. 正則表達式來刪除 「= \ R」
- 30. php正則表達式刪除HTML
爲什麼這個問題標記爲C++或qt4? – 2011-03-29 19:37:50
@John Dibling:我想這是因爲OP也在使用Qt4和C++。如果有針對Qt4/C++的解決方案,我想可能會比通用的解決方案更受歡迎。 – FrustratedWithFormsDesigner 2011-03-29 20:04:15
你怎麼知道一點後。真的是後綴? 「.hidenfile」多個後綴怎麼樣? 「foo.bar.tar.gz」操縱文件名的最終目的是什麼? – 2011-03-29 21:10:28