Пожалуйста, помогите мне разделить сложную строку заголовка на элементы

#python #re

Вопрос:

Пожалуйста, помогите мне использовать регулярные выражения Python для разделения этого заголовка на элементы

 TITLE="D:Experiments2021iai_0107_exp1_Analysisexp1_006014.T000.D000.P001.H000.L.vec" VARIABLES="X mm", "Y mm", "U m/s", "V m/s", "CHC", DATASETAUXDATA Application="PIV" DATASETAUXDATA SourceImageWidth="4008" DATASETAUXDATA SourceImageHeight="2672" DATASETAUXDATA MicrometersPerPixelX="85.809998" DATASETAUXDATA MicrometersPerPixelY="85.809998" DATASETAUXDATA LengthUnit="mm" DATASETAUXDATA OriginInImageX="0.000000" DATASETAUXDATA OriginInImageY="0.000000" DATASETAUXDATA MicrosecondsPerDeltaT="50.000000" DATASETAUXDATA TimeUnit="ms" DATASETAUXDATA SecondaryPeakNumber="0" DATASETAUXDATA DewarpedImageSource="0" ZONE I=124, J=82, F=POINT
 

Я не могу понять, как отделить повторяющийся шаблон типа:

 DATASETAUXDATA MicrosecondsPerDeltaT="50.000000" DATASETAUXDATA TimeUnit="ms
 

в:

 header = {'MicrosecondsPerDeltaT':50.0000, 'TimeUnit':'ms', ...}
 

и так далее.

Заранее спасибо, Алекс

Комментарии:

1. На что мы смотрим? Какой заголовок? Каков формат?

Ответ №1:

Вы можете попробовать приведенный ниже код

 import re
r = re.compile('DATASETAUXDATA MicrosecondsPerDeltaT="(?P<MicrosecondsPerDeltaT>d*[.,]?d*)" DATASETAUXDATA TimeUnit="(?P<TimeUnit>.*)"')
s = '''DATASETAUXDATA MicrosecondsPerDeltaT="50.000000" DATASETAUXDATA TimeUnit="ms"'''
output = r.match(s).groupdict()
print(output)
# {'MicrosecondsPerDeltaT': '50.000000', 'TimeUnit': 'ms'}
 

Ответ №2:

Я предполагаю, что вы хотите создать словарь с парами ключевых значений, соответствующими этому шаблону. Если это то, чего вы хотите, что-то вроде этого сделает свое дело:

 import re

text="""
TITLE="D:Experiments2021iai_0107_exp1_Analysisexp1_006014.T000.D000.P001.H000.L.vec" VARIABLES="X mm", "Y mm", "U m/s", "V m/s", "CHC", DATASETAUXDATA Application="PIV" DATASETAUXDATA SourceImageWidth="4008" DATASETAUXDATA SourceImageHeight="2672" DATASETAUXDATA MicrometersPerPixelX="85.809998" DATASETAUXDATA MicrometersPerPixelY="85.809998" DATASETAUXDATA LengthUnit="mm" DATASETAUXDATA OriginInImageX="0.000000" DATASETAUXDATA OriginInImageY="0.000000" DATASETAUXDATA MicrosecondsPerDeltaT="50.000000" DATASETAUXDATA TimeUnit="ms" DATASETAUXDATA SecondaryPeakNumber="0" DATASETAUXDATA DewarpedImageSource="0" ZONE I=124, J=82, F=POINT
"""

result = re.findall(r"DATASETAUXDATA w ="[w.] "", text)
dict = {}

for item in result:
    pair = item.replace("DATASETAUXDATA ", "")
    key_value = pair.split("=")
    dict[key_value[0]] = key_value[1].replace(""", "")

print(dict)

# prints {'Application': 'PIV', 'SourceImageWidth': '4008', 'SourceImageHeight': '2672', 'MicrometersPerPixelX': '85.809998', 'MicrometersPerPixelY': '85.809998', 'LengthUnit': 'mm', 'OriginInImageX': '0.000000', 'OriginInImageY': '0.000000', 'MicrosecondsPerDeltaT': '50.000000', 'TimeUnit': 'ms', 'SecondaryPeakNumber': '0', 'DewarpedImageSource': '0'}