如何在 DART 中获取两个字符串之间的子字符串?

问题描述 投票:0回答:7

我怎样才能实现类似的解决方案:如何在 PHP 中获取两个字符串之间的子字符串?但在 DART 中

例如我有一个字符串:

String data = "the quick brown fox jumps over the lazy dog"

我还有另外两个字符串:
quick
over

我想要这两个字符串中的
data
并期待结果:
brown fox jumps

flutter dart
7个回答
79
投票

您可以将

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
排除


10
投票

我喜欢带有lookbehind

(?<...)
和lookahead
(?=...)
的正则表达式:

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));
}

5
投票
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();

3
投票

对于未来的研究人员: 从字符串的开头到特定的符号或字符;

使用比 regExp 更快的 substring 和 indexOf 来做到这一点:

void main() {
  const str = "Cars/Horses";

  final endIndex = str.indexOf("/", 0);

  print(str.substring(0, endIndex)); // Cars
}

这可能会对某人有帮助


2
投票

您可以借助正则表达式来做到这一点。 创建一个函数,它将返回正则表达式匹配项

Iterable<String> _allStringMatches(String text, RegExp regExp) => 
regExp.allMatches(text).map((m) => m.group(0));

然后将正则表达式定义为

RegExp(r"[quick ]{1}.*[ over]{1}"))


1
投票

子字符串功能不是那么好,并且对于高于“结束”值的字符串会抛出错误。

为了使其更简单,请使用这个不会引发错误的自定义函数,而不是使用最大长度。

String substring(String original, {required int start, int? end}) {
  if (end == null) {
    return original.substring(start);
  }
  if (original.length < end) {
    return original.substring(start, original.length);
  }
  return original.substring(start, end);
}

0
投票
void main() {
  String str = "the quick brown fox jumps over the lazy dog";
  String start = "quick";
  String end = "over";

  print(getSringBetween(str, start, end));
  //OUT PUTS: brown fox jumps
}

String getSringBetween(str, start, end) {
  return str.split(start).last.split(end)[0].trim();
}
© www.soinside.com 2019 - 2024. All rights reserved.