我需要使用正則表達式解析一行,其最後兩個參數是可選的。我給你一個例子和我寫的表達。Python中可選字段的正則表達式
驚歎號和名字在最後是可選的。
x = re.compile('(?P<stop_id>\d{9})\s*(?P<admin_one>[[\x00-\x7F]{6}|\s{6}])\s*'
'(?P<service_one>[[\x00-\x7F]{3}|\s{3])\s(?P<line_one>.{8})\s*'
'(?P<direction_one>[[\x00-\x7F]{1}|\s{1}])\s*(?P<admin_two>[[\x00-\x7F]{6}|\s{6}])\s*'
'(?P<service_two>[[\x00-\x7F]{3}|\s{3])\s(?P<line_two>.{8})\s*'
'(?P<direction_two>[[\x00-\x7F]{1}|\s{1}])\s*'
'(?P<interchange_time>[[\x00-\x7F]{3}|\s{3}])'
'(\s+(?P<exclaim>).{1})?(\s+(?P<stop_name>.+))?')
,當我搜索它下面的字符串,
m = x.search('071124127 00006_ 022 94N 1 00006_ 022 83N * 006 Radhuspladsen')
它提供了以下輸出,當我做m.groups()
('071124127', '00006_', '022', '94N ', '1', '00006_', '022', '83N ',
'*', '006', ' R', '', None, None)
我需要exclaim
爲None
和stop_name
爲Radhuspladsen
。 如何寫regex
呢?
嘿感謝,但這些似乎有些問題,因爲總是驚呼原來是無以下有效輸入。 >>> m = x.search('071124127 00006_ 022 94N 1 00006_ 022 83N * 006!') >>> m.groups() ('071124127','00006_','022','94N' ,'1','00006_','022','83N','*','006',None,'!') – 2014-09-29 11:19:49
@IshanBhatt http://regex101.com/r/dN8sA5/13似乎一些間距issue.newaz試試這個 – vks 2014-09-29 11:26:21
有一點可以肯定的是,歎號令牌只能包含'!'或者它不在那裏。看看是否有幫助。 – 2014-09-29 11:26:38