2016-12-09 143 views
-3

我有很多的文件名與模式SURENAME__notalwaysmiddlename_firstnames_1230123Abc123-16x_notalways.pdf,如:正則表達式來蟒蛇正則表達式

  • SMITH_John_001322Cde444-16v_HA.pdf
  • FLORRICK-DOILE_Debora_Alicia_321333Gef213-16p.pdf
  • ROBINSON-SMITH_Maria-Louise_321333Gef213-16p_GH.pdf

我的老正則表達式是([\w]*)_([\w-\w]+)\.\w+但之後切換到Python並獲得第一個雙管姓(甚至是名字),我無法讓它運行。

隨着舊的正則表達式我有兩個羣體:

  1. SMITH_James
  2. 001322Cde444-16v_HA

但現在我不知道如何與re實現這一目標,甚至包括偶爾的雙管組1中的名稱和組2中的ID。

+1

前右找到逃跑期間字發佈你正在使用的代碼,所以我們可以幫助你:) –

+2

我建議使用eg https://regex101.com/#python來開發正則表達式。它給你解釋你的模式和目前匹配的視覺演示。 – jonrsharpe

+0

真的,'[\ w- \ w]'?這個「範圍」的目的是什麼?試試['(\ w *)_([\ w-] +)\。\ w +'](https://regex101.com/r/4mEALO/1)。但是,我不確定輸出應該是什麼。如果你使用're.findall',它將只返回一個元組列表。使用're.finditer'獲取所有匹配對象以訪問任何匹配數據。 –

回答

1

([A-Z-]+)(?:_([A-z-]+))?_([A-z-]+)_(\d.*)\.

此模式將返回姓氏,潛在中間名,名字和最終字符串。

  • ([A-Z-]+)返回一個大寫的詞,還可以含有-
  • (?:_([A-z-]+))?返回0或通過_前面有一個字的1個匹配。該(?:使得_非捕獲
  • ([A-z-]+)回報也可以包含-
  • (\d.*)返回以數字
  • \.開頭的字符串的文件類型
+1

正則表達式的答案更有用,如果你包含他們如何工作的解釋。 – skrrgwasme