Как я могу добиться аналогичного решения: Как получить подстроку между двумя строками в PHP?, но в DART
Например, у меня есть строка:String data = "the quick brown fox jumps over the lazy dog"
У меня есть две другие строки: quick и over
Я хочу data внутри этих двух строк и ожидаю результата: brown fox jumps





Вы можете использовать String.indexOf в сочетании с String.substring:
void main() {
const str = "the quick brown fox jumps over the lazy dog";
const start = "quick";
const end = "over";
final startIndex = str.indexOf(start);
final endIndex = str.indexOf(end, startIndex + start.length);
print(str.substring(startIndex + start.length, endIndex)); // brown fox jumps
}
Также обратите внимание, что startIndex — это включительно, а endIndex — это эксклюзивный.
Моя строка на самом деле не отформатирована HTML и очень длинная. substring метод завершился с ошибкой RangeError. Итак, ответ @Сергея Солодухина сработал для меня. Это отлично подходит для небольших строк. Спасибо.
@SukhchainSingh это была ошибка. я только что исправил это
@RémiRousselet Спасибо, сработало. Это намного быстрее, чем регулярное выражение, как и ожидалось :)
А реальные данные? Порядок слов может измениться «быстрая коричневая лиса перепрыгивает ленивую собаку» или одно ключевое слово может отсутствовать.
@SergeySolodukhin Нет, в моем случае его нет, и порядок тоже не изменится.
Вы можете сделать это с помощью регулярного выражения. Создайте функцию, которая будет возвращать совпадения регулярных выражений как
Iterable<String> _allStringMatches(String text, RegExp regExp) =>
regExp.allMatches(text).map((m) => m.group(0));
А затем определите свое регулярное выражение как RegExp(r"[quick ]{1}.*[ over]{1}"))
Я люблю регулярное выражение с просмотром назад (?<...) и просмотром вперед (?=...):
void main() {
var re = RegExp(r'(?<=quick)(.*)(?=over)');
String data = "the quick brown fox jumps over the lazy dog";
var match = re.firstMatch(data);
if (match != null) print(match.group(0));
}
Спасибо, моя строка была очень большой, поэтому ответ Реми Русселе не помог. Этот работал как шарм.
final str = 'the quick brown fox jumps over the lazy dog';
final start = 'quick';
final end = 'over';
final startIndex = str.indexOf(start);
final endIndex = str.indexOf(end);
final result = str.substring(startIndex + start.length, endIndex).trim();
Я почти собирался опубликовать ответ с
RegExp. Но этот лучше