[问题] 正规表达式的括号中括号分组问题

楼主: 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