簡體   English   中英

用於簡單模式的正則表達式

[英]Regular expression for simple patterns

問題

我有一個圖像數據集,描述了出​​現在特定圖像中的不同活動。 數據集中的每個圖像都命名為<activity>_<num> 例如, educating_13.jpgpracticing_147.jpg等。

現在,我想選擇具有相同活動的圖像,例如說“烹飪”,因此我決定使用Python中的re模塊進行此操作。 我寫的腳本就像

pattern = "^(\w+)_(\d+)$"
for filename in os.listdir("."):
    root, _ = os.path.splitext(filename)
    activity = re.match(pattern, root).group(1)
    if activity == "cooking":
        # do something

但是,即使成功處理了許多圖像。 最終它因AttributeError中止。 似乎某些圖像無法與指定的圖案匹配。

那我會犯一些錯誤嗎? 任何輸入表示贊賞。

編輯:

通過在Python中使用異常機制,結果證明近15萬張圖像中有一個名為temp.txt的文本文件,這是違反模式的文件。

不使用正則表達式。 使用str.split

例如:

for filename in os.listdir("."):
    root, _ = os.path.splitext(filename)
    if "_" in root:
        activity, num = root.split("_")
        if activity == "cooking":
            # do something

如果不匹配re.match(pattern, root)可以返回None

  1. 您可以檢查re.match(pattern, root) == None並找到圖像
  2. 使用https://regex101.com/檢查圖像名稱的正則表達式

如果re.match(pattern, root)為None,則調用.group(1)將給您屬性錯誤。 因此,在某些情況下,您似乎無法匹配目錄中的所有條目。

很難知道哪個問題給您帶來了麻煩,但是默認情況下\\w只匹配[a-zA-Z0-9_] ,因此:

  • 是否有文件包含標點符號(例如%)?
  • 是否有任何文件包含非ASCII字符(例如ñ)?
  • 目錄中是否還有與數據集無關的文件?

您可以發布目錄列表,然后也許我們可以找到文件。

暫無
暫無

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

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