簡體   English   中英

正則表達式提取日期和特定字符串

[英]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+ 個字字符
  • $字符串結尾

正則表達式演示| Python 演示

例如

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.

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