Синтаксис []
является частью синтаксиса YAML. Если вы создали это с помощью программы, и предполагается, что это строки, используемая вами программа неправильно реализовала YAML, поскольку строки должны быть заключены в кавычки.
Вы можете попробовать следующую экспериментальную perl скрипт для добавления кавычек вокруг [...]
. Это основано на предположении, что ваши документы не используют последовательности стилей потока, которые должны быть реальными последовательностями. Также это может работать не во всех случаях.
Это определенно не будет работать, если строка имеет только открывающий [
, но не закрывающий.
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
use YAML::LibYAML::API::XS;
my $yaml = <<'EOM';
key:
- [HELLO]
- another string
- another
- [HELLO2]
EOM
my @lines = split /(?<=\n)/, $yaml;
my @events;
YAML::LibYAML::API::XS::parse_string_events($yaml, \@events);
while (my $event = shift @events) {
if ($event->{name} eq 'sequence_start_event' and $event->{style} == 2) {
my $start = $event->{start};
my $line = $start->{line};
my $column = $start->{column};
# Add single quote before [
substr($lines[ $line ], $column, 0) = "'";
# find the next matching `]`
while (my $event = shift @events) {
if ($event->{name} eq 'sequence_end_event') {
my $end = $event->{end};
my $line = $end->{line};
# Add single quote after ]
# add 1 because we modified the line already and added one char
my $column = $end->{column} + 1;
substr($lines[ $line ], $column, 0) = "'";
last;
}
}
}
}
$yaml = join '', @lines;
say $yaml;
Вы можете проделайте то же самое с Python, если у вас есть интерфейс к API libyaml.
Вывод:
key:
- '[HELLO]'
- another string
- another
- '[HELLO2]'