Я пытаюсь разбить файл, который содержит формат 'string = float' несколько раз.
Ниже показано, как файл выглядит.
+name1 = 32 name2= 4
+name3 = 2 name4 = 5
+name5 = 2e+23
...
И я хочу, чтобы они поместили его в словарь.
Нравится ...
a={name1:32, name2:4, name3:2, name4:5, name5:2e+23}
Я новичок в регулярных выражениях, и мне трудно понять, что делать.
После некоторого поиска в Google, я попытался сделать, как показано ниже, чтобы удалить символ "+" и пробелы.
p=re.compile('[^+\s]+')
splitted_list=p.findall(lineof_file)
Но это дало мне две проблемы ..
1. когда нет пробела между именем и знаком "=", он не спилит.
2. для чисел, таких как 2e + 23, он разделяет знак + между ними.
Мне удалось разобрать файл, как я хотел после некоторой модификации кода Депперма.
Но я столкнулся с другой проблемой.
Чтобы лучше объяснить мои проблемы. Ниже показано, как может выглядеть мой файл.
После знака «+» пара параметров и значений может появиться со знаком «=».
Имя параметра может содержать алфавит и цифру в любой позиции. Также значение может содержать знак + - с научным уведомлением (E / e- +). И иногда значение может быть математическим выражением, если оно заключено в одинарные кавычки.
+ abc2dfg3 = -2.3534E-03 dfe4c3= 2.000
+ abcdefg= '1.00232e-1*x' * bdfd=1e-3
Мне удалось разобрать вышесказанное с помощью приведенного ниже регулярного выражения.
re.findall("(\w+)\s*=\s*([+-]?[\d+.Ee+-]+|'[^']+')",eachline)
Но теперь моя проблема иногда похожа на "* bdfd = 1e-3", может быть какой-то комментарий. Все, что после * (звездочка) в моем файле, следует рассматривать как комментарий, но не в том случае, если * присутствует внутри строки в одинарных кавычках.
С приведенным выше регулярным выражением, он также анализирует "bdfd = 1e-3", но я хочу, чтобы он не анализировался.
Я пытался найти решение в течение нескольких часов, но пока не смог найти никакого решения.