使用regex Dart/Flutter提取数据



我想从以下中提取数据

Periode Aantal uur Sv-loon
01-06-2019 t/m 30-06-2019 35 € 800,00
01-05-2019 t/m 31-05-2019 35 € 1.056,00
01-04-2019 t/m 30-04-2019 35 € 800,00
01-03-2019 t/m 31-03-2019 35 € 800,00
01-02-2019 t/m 28-02-2019 35 € 800,00
Datum: 06 augustus 2019

预期输出为:

01-06-2019 t/m 30-06-2019 35 € 800,00
01-05-2019 t/m 31-05-2019 35 € 1.056,00
01-04-2019 t/m 30-04-2019 35 € 800,00
01-03-2019 t/m 31-03-2019 35 € 800,00
01-02-2019 t/m 28-02-2019 35 € 800,00

检查我迄今为止尝试的示例

您可以使用

Sv-loons*([sS]*?)s*Datum:

请参阅regex演示详细信息

  • Sv-loon-文字字符串
  • s*-0个或更多空白
  • ([sS]*?)-组1:任何0个或多个尽可能少的字符
  • s*-0个或更多空白
  • Datum:-文字字符串

参见Dart演示:

String txt = "Periode Aantal uur Sv-loonn01-06-2019 t/m 30-06-2019 35 € 800,00n01-05-2019 t/m 31-05-2019 35 € 1.056,00n01-04-2019 t/m 30-04-2019 35 € 800,00n01-03-2019 t/m 31-03-2019 35 € 800,00n01-02-2019 t/m 28-02-2019 35 € 800,00nDatum: 06 augustus 2019";
RegExp rx = RegExp(r'Sv-loons*([sS]*?)s*Datum:');
Match match = rx.firstMatch(txt);
if (match != null) {
print(match.group(1));
}

输出

01-06-2019 t/m 30-06-2019 35 € 800,00
01-05-2019 t/m 31-05-2019 35 € 1.056,00
01-04-2019 t/m 30-04-2019 35 € 800,00
01-03-2019 t/m 31-03-2019 35 € 800,00
01-02-2019 t/m 28-02-2019 35 € 800,00

仅提取日期:

void main() {
String inputString = "Your String 1/19/2023 9:29:11 AM";
RegExp dateRegex = new RegExp(r"(d{1,2}/d{1,2}/d{4})");
Iterable<RegExpMatch> matches = dateRegex.allMatches(inputString);
for (RegExpMatch m in matches) {
print(m.group(0));
}
}

这将输出:2023年1月19日

提取日期和时间:

void main() {
String inputString = "Your String 1/19/2023 9:29:11 AM";
RegExp dateTimeRegex = new RegExp(r"(d{1,2}/d{1,2}/d{4} d{1,2}:d{2}:d{2} [AP]M)");
Iterable<RegExpMatch> matches = dateTimeRegex.allMatches(inputString);
for (RegExpMatch m in matches) {
print(m.group(0));
}
}

这将输出:1/19/2023 9:29:11 AM

RegExp re = new RegExp("((?<=Sv-loon)([\S\s]*?)(?=Datum:))");

其中?=是正向展望。

最新更新