Я хочу извлечь подстроки из строки, используя регулярное выражение в флаттере.
Например: если строка "HI hello @shemeer how are you @nijin"
, ожидаемый результат будет [shemeer,nijin]
Ввод: String s= "HI hello @shemeer ul haq how are you @nijinsha rah"
Выход: output=["shemeer ul haq","nijinsha rah"]
Кто-нибудь знает это, пожалуйста, помогите мне
Вы можете разбить строку на слова, а затем найти @
и создать список на его основе.
final names = data
.split(" ")
.where((element) => element.startsWith("@"))
.map((e) => e.substring(1))
.toList();
Или используйте allMatches
с RegExp(r'@\w+')
, как pskink упомянул в комментарии.
final names = RegExp(r'@\w+')
.allMatches(data)
.map((e) => e.group(0)!.substring(1))
.toList();
надеюсь, ты понял
Я обновил запрос, пожалуйста, проверьте и ответьте
Вы можете задать новый вопрос, пока он отличается от предыдущего. И хотя длина слов имени может быть разной, я не знаю об этом регулярном выражении.
Вы можете попробовать использовать этот шаблон регулярного выражения: (?<=@)\w+
RegExp exp = RegExp(r'(?<=@)(\w+)');
String str = 'HI hello @shemeer how are you @nijin';
Iterable<RegExpMatch> output = exp.allMatches(str);
for (final m in output) {
print(m[0]);
}
вы должны вызвать метод allMatches, все, что вам нужно, это написать правильный
RegExp
- есть много онлайн-руководств о том, как это сделать