作者LonelyDream (Rafael)
看板Python
標題[問題] 正規表達式的括號中括號分組問題
時間Wed Jul 18 23:21:49 2018
Hi 各位前輩與同好們好,
最近在做一個小Project裡面會用到Regular Expression,
產生了個小問題, 雖然不影響我後續寫程式, 但總覺得資料量大到一個程度時,
可能會太佔空間, 因此上來提問
我的正規表達式是這樣寫的:
(\d)+\s+([A-Z][a-z]+(\s*[A-Z][a-z]+)+)\s+([A-Z]{3})\s+(\d{1,3}(,\d\d\d)*)'
要抓的資料格式大概長這樣
01 Donald Trump USA 108,304,999
預計要有的分組應該是
01
Donald Trump
USA
108,304,999
但因為中間和最後的括號裡頭都還有括號, 要去表示某些資料可有可無
所以輸出的分組結果會變成
01
Donald Trump
Trump
USA
108,304,999
,304,999
多出了兩個不必要的資料, 想請問有什麼方式可以替代不是要分組的括號呢?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.7.53
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1531927313.A.59D.html
推 TuCH: 括號最前面加上?: 例如(?:/d) 07/18 23:24
→ TuCH: *(?:\d) 07/18 23:25
→ LonelyDream: 請問這樣的用意是???.... 07/18 23:31
→ LonelyDream: 哦!是非捕獲分組 但用了不知道為什麼失敗了QQ 07/18 23:37
→ LonelyDream: 成功了!!!非常感謝!!! 07/18 23:40
推 bibo9901: 也可以用 (?P<name>\d+) 幫 group 取名 07/19 09:49
→ bibo9901: 然後用 match.group('name') 取值 07/19 09:50
→ LonelyDream: 哦! 原來還有這個功能! 感謝樓上! 07/22 21:27