[問題] 正規表達式的括號中括號分組問題

作者: LonelyDream (Rafans Liu)   2018-07-18 23:21:49
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
多出了兩個不必要的資料, 想請問有什麼方式可以替代不是要分組的括號呢?
謝謝
作者: TuCH (謬客)   2018-07-18 23:24:00
括號最前面加上?: 例如(?:/d)*(?:\d)
作者: LonelyDream (Rafans Liu)   2018-07-18 23:31:00
請問這樣的用意是???....哦!是非捕獲分組 但用了不知道為什麼失敗了QQ成功了!!!非常感謝!!!
作者: bibo9901 (function(){})()   2018-07-19 09:49:00
也可以用 (?P<name>\d+) 幫 group 取名然後用 match.group('name') 取值
作者: LonelyDream (Rafans Liu)   2018-07-22 21:27:00
哦! 原來還有這個功能! 感謝樓上!

Links booklink

Contact Us: admin [ a t ] ucptt.com