あなたは文字通り、それ以外のパターンがまたはとして解釈される一致する|
をエスケープする必要があります。
text = "Bob|19|01012017"
pat = re.compile("(?P<name>.+)\|.*\|(?P<bday>.+)")
result = pat.match(text)
d = result.groupdict()
d
# {'bday': '01012017', 'name': 'Bob'}
速度にsplit
方法に対する簡単なテストのための:
text = "Bob|19|01012017"
pat = re.compile("(?P<name>.+)\|.*\|(?P<bday>.+)")
def regex_to_dict(texts, pat):
return [pat.match(text).groupdict() for text in texts]
regex_to_dict([text], pat)
# [{'bday': '01012017', 'name': 'Bob'}]
def split_to_dict(texts):
dd = []
for text in texts:
name, _, bday = text.split('|')
dd.append({'bday': bday, 'name': name})
return dd
split_to_dict([text])
# [{'bday': '01012017', 'name': 'Bob'}]
texts = [text] * 100000
%timeit regex_to_dict(texts, pat)
# 10 loops, best of 3: 119 ms per loop
%timeit split_to_dict(texts)
# 10 loops, best of 3: 58.6 ms per loop
OMGはあなたに感謝します。私は知らなかった|撮影された。 |何をする|正規表現の意味ですか? –
これは 'or'を意味し、' blah | foo'は例えば 'blah'や' foo'にマッチします。 – Psidom
また、サイドの質問:時間の複雑さの観点から、これをより高速に使用しているか、string.splitを使用していて、dictを速く構築していますか? –