[英]Regex to extract date and specific string
我在下面有一個文件名,我想提取year
和_TEXT
部分。
fle_2019-11-17A17-21-09.01(_TEXT).txt
我可以使用兩個正則表達式來做到這一點,然后加入結果。
(?<=\\_)(\\d{4})(?=\\-)
這給了我year
(?<=\\()(.*)(?=\\))
這給了我_TEXT
有沒有辦法從單個表達式中得到這個?
一種選擇是使用 2 個捕獲組。 根據您允許在第一個下划線之前匹配的內容,您可以例如使用字符類來匹配沒有下划線的單詞字符[^\\W_]+
^[^\W_]+_(\d{4})-[\w.-]+\(([^)]+)\)\.\w+$
在零件中
^
字符串開始[^\\W_]+
匹配 1+ 個單詞字符,除了_
_
匹配_
(\\d{4})
捕獲第 1 組,匹配 1+ 個數字-[\\w.-]+
匹配-
和 1+ 個單詞字符, .
或-
(使用您允許匹配的內容擴展字符類\\(
匹配(
([^)]+)
捕獲組 2 ,匹配 1+ 次任何字符,除了)
\\)
匹配)
\\.\\w+
匹配一個.
和 1+ 個字字符$
字符串結尾例如
import re
regex = r"^[^\W_]+_(\d{4})-[\w.-]+\(([^)]+)\)\.\w+$"
test_str = "fle_2019-11-17A17-21-09.01(_TEXT).txt"
print(re.findall(regex, test_str))
輸出
[('2019', '_TEXT')]
為了簡單起見,我們可以嘗試將re.findall
與捕獲 4 位年份或文件名的交替使用:
file = "fle_2019-11-17A17-21-09.01(_TEXT).txt"
parts = re.findall(r'\d{4}(?=-\d{2})|(?<=\().*?(?=\))', file)
print(parts)
這打印:
['2019', '_TEXT']
我喜歡這種方法,因為輸出已經為年份和文件名生成了單獨的邏輯值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.