У меня есть данные, которые могут быть в определенных форматах, которые у меня возникают проблемы при правильном разборе. Первоначально я использовал re.split для разделения по периодам и условного соединения определенных элементов, однако это создало дополнительные проблемы, которые, как я думал, могли быть решены с помощью регулярных выражений, но я не знаю, как правильно отформатировать их.
Данные могут быть в следующих форматах
STATICFIELD1.STATICFIELD2.VARIABLE1.STATICFIELD3/VARIABLE2
STATICFIELD1.STATICFIELD2.VARIABLE1.VARIABLE2.STATICFIELD3/VARIABLE3
STATICFIELD1.STATICFIELD2..VARIABLE1.STATICFIELD3/VARIABLE2
STATICFIELD1.STATICFIELD2.VARIABLE1/VARIABLE2
STATICFIELD1.STATICFIELD2..VARIABLE1/VARIABLE2
Проблема, с которой я сталкиваюсь, состоит в том, что использование регулярного выражения для разделения на основе периодов и косых черт означает, что если перед переменным стоит точка, он не включает этот период. Я хочу иметь возможность иметь переменную в виде строки, если она имеет точку впереди, например, var = ".VARIABLE1" и в то же время var = "VARIABLE.VARIABLE2". Мне не нужно хранить статические поля, мне просто нужно иметь возможность извлекать переменные поля независимо от того, есть ли один, два или один с литеральным периодом впереди.
Я пытался использовать re.search, но могу получить только первое статическое поле.
Я попытался использовать re.split ('. | /', Line), но затем я столкнулся с проблемами, связанными с невозможностью анализа переменных, которые имеют периоды впереди, например, ".car" вместо "car", или я имею вручную соединить те с двумя переменными с помощью ['.'. join (x [2: 4])], чего я не хочу делать из-за изменчивости общего количества полей.
Мой желаемый вывод для данных примеров - две отдельные переменные, содержащие переменные из ввода
x = VARIABLE1 y = VARIABLE2
x = VARIABLE1.VARIABLE2 y = VARIABLE3
x = .VARIABLE1 y = VARIABLE2
x = VARIABLE1 y = VARIABLE2
x = .VARIABLE1 y= VARIABLE2
x = re.split('\/', r)
numElements = len(x)
if(x[(numElements - 2)] == "STATICFIELD2"):
y[x[2]] = 1
else:
x[2:4] = ['.'.join(x[2:4])]
y[x[2]] = 1
x = re.search(r'(\bSTATICFIELD1.STATICFIELD2.\b+)(\b.STATICFIELD3/\b)',line)