Я хочу получить список подстрок, соответствующих RegExp в строке. Каков наилучший способ сделать это?Лучший способ получить все подстроки, соответствующие RegExp в Dart
RegExp объект из дротик: core есть Iterable<Match> allMatches(String input, [int start=0])
способ. Это то, что мне нужно, но я хочу получить Iterable of Strings, а не совпадения.
Существует также метод String stringMatch(String input)
, который возвращает строку, но только первое совпадение.
Так что я написал myslef эту функцию с помощью map
:
Iterable<String> _allStringMatches(String text, RegExp regExp) {
Iterable<Match> matches = regExp.allMatches(text);
List<Match> listOfMatches = matches.toList();
// TODO: there must be a better way to get list of Strings out of list of Matches
Iterable<String> listOfStringMatches = listOfMatches.map((Match m) {
return m.input.substring(m.start, m.end);
});
return listOfStringMatches;
}
, но мне кажется, что это довольно основные функциональные возможности, и я не могу поверить, что это не в любом месте в API. Я предполагаю, что должен быть лучший способ выполнить такую основную задачу.
Можете ли вы опубликовать пример строки и что подстроки вы хотите? Вы можете просто перебрать все совпадения и получить 'group (n)', с n = 0 для всего матча и других n для частей. – Robert
'group (0)' совпадения возвращает всю строку, сопоставленную. Вы можете немного упростить свой код, используя его. – fog
См. Мое сообщение, @fog :) – Robert