У меня есть строки, подобные следующим, упомянутым как Ввод , которые необходимо обработать и преобразовать в пары name
/ value
, как указано ниже:
Вход: FOO = BAR=BAZ
Выход: name='FOO', value='BAR=BAZ'
Вход: FOO = BAR
Выход: name='FOO', value='BAR'
Вход: FOO =
Выход: name='FOO', value=''
Вход: = BAR=BAZ
Выход: name='', value='BAR:BAZ'
Вход: = BAR
Выход: name='', value='BAR'
Ввод: FOO
Выход: name='FOO', value=''
Обратите внимание, что разделитель либо =
или :
.Отсутствие разделителя также возможно.
Следующий код охватывает все вышеупомянутые случаи, кроме последнего,
regexp {^\s*(.*?)\s*[=:]\s*(.*?)\s*$} $setting -> name value
if {![info exists name]} {
set name {}
}
if {![info exists value]} {
set value {}
}
puts "name='$name', value='$value'"
, для которого он возвращает
Выход: name='', value=''
вместо
Выход: name='FOO', value=''
Последний случай может быть охвачен регулярным выражением ниже:
regexp {^\s*(.*?)\s*$} $setting -> name value
Как эти регулярные выражения можно объединить, чтобы иметь только одно регулярное выражение, охватывающее все случаи?