引数のリストのような入力があります。
input1 = '''
title="My First Blog" author='John Doe'
'''
値は一重引用符または二重引用符で囲むことができますが、エスケープすることもできます。
input2 = '''
title='John\'s First Blog' author="John Doe"
'''
正規表現を使用して、一重引用符または二重引用符とエスケープされた引用符のいずれかを説明するキーと値のペアを抽出する方法はありますか?
Pythonを使用すると、次の正規表現を使用して、エスケープされていない引用符を処理できます。
rex = r"(\w+)\=(?P<quote>['\"])(.*?)(?P=quote)"
その場合の返品は次のとおりです。
import re
re.findall(rex, input1)
[('title', '"', 'My First Blog'), ('author', "'", 'John Doe')]
と
import re
re.findall(rex, input2)
[('title', "'", 'John'), ('author', '"', 'John Doe')]
後者は正しくありません。エスケープされた引用符を処理する方法がわかりません-おそらく(。*?)セクションにあります。私はPython正規表現に投稿された回答のソリューションを使用して、一重引用符で囲まれたテキストと一致させ、エスケープされた引用符(およびタブ/改行)を無視して無駄にしました。
技術的には、引用符を返すためにfindallは必要ありません。キーと値のペアだけでなく、簡単に処理できます。
どんな助けでもいただければ幸いです!ありがとう!