我試圖分割字符串,如下面的標題,並匹配名稱,然後任何其他信息,無論是括號/大括號或破折號後,m/n破折號,單槓)。使用Python的re模塊匹配正則表達式組(帶或者)和特殊字符
正則表達式對我來說看起來很好,我可以在其他正則表達式測試器上測試它,但在使用Python運行時不起作用。
有一些奇怪的事情正在進行。第一個虛線標題似乎已經匹配,但addition_a
組不包含正確的字符串。另外,出於某種原因,像各種破折號這樣的特殊字符根本不匹配。腳本的編碼是utf-8,所以我假設原始正則表達式字符串中的破折號應該可以正常工作,但它們不是。
# -*- coding: utf-8 -*-
import re
titles = [
'Spaced (News)',
'Angry Birds [Game]',
'Cheats - for all games', # dash
'Cheats – for all games', # ndash
'Cheats — for all games', # mdash
'Cheats ― for all games' # horizontal bar
]
regex = re.compile(r'^(?P<name>.+)\s+(([-–—―]\s+(?P<addition_a>.+))|([\(\[](?P<addition_b>.+)[\)\]]))$')
for title in titles:
data = {}
match = regex.match(title.strip())
if match:
data['name'] = match.group('name')
try:
data['addition'] = match.group('addition_a')
except IndexError:
pass
try:
data['addition'] = match.group('addition_b')
except IndexError:
pass
print data
輸出:
{'addition': 'News', 'name': 'Spaces'}
{'addition': 'Game', 'name': 'Angry Birds'}
{'addition': None, 'name': 'Cheats'}
{}
{}
{}
哎呦,發現我離開了'IndexError'從我被一個數字索引訪問組時趕上!衛生署。 –