特定のキーの日付と一致するように検索しましたが、現在、すべての日付と一致するか、特定のキーと一致しますが、日付を分けて一致することはできません。
より視覚的な説明は次のとおりです
私が持っている入力
Mystring ="
Text("List1:[2000-00-00 00:00, 2020-09-02 04:30, 2020-09-03 00:30, 2020-09-03 02:30, 2020-09-03 04:30, 2020-09-03 07:25, 2020-09-03 10:00, 2020-09-03 10:02],
Text("List2:[2000-00-00 00:00, 2020-09-02 04:30, 2020-09-03 00:30, 2020-09-03 02:30, 2020-09-03 04:30, 2020-09-03 07:25, 2020-09-03 10:00, 2020-09-03 10:02]
"
この関数を使用すると、Mystring のすべての日付が一致します
RegExp regExp79 = new RegExp(r'\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}');
mylistdate = regExp79.allMatches(Mystring).map((z) => z.group(0));
print(mylistdate);
ただし、出力にはすべての日付が含まれます (list1 と List2)
list1 のみと一致させようとします
そこで、文字数制限を設けてみました。たとえば、list1 の日付のみが必要な場合は、Text("List1:[. and ]
と一致させようとしました。
これらの正規表現はすべて個別に動作しますが、連携して動作させる方法が見つかりません
Text\("list1:\[ => start limitation
(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}) => extraction of date
(.*?)] => end of limitation
しかし、すべてを溶かしても機能しません。最初の日付のみが選択されるため、限られた選択範囲のすべての日付と一致します。
Text\("List1:\[(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}).*?]
https://regex101.com/r/6adb1u/1
1
Flutter 正規表現はまだ無限長の後読みパターンをサポートしていませんね。存在する場合は、/(?<=Text\("List1:\[[^\][]*?)\d{4}-\d{2}-」のような JS 正規表現を使用できます。 \d{2}\s\d{2}:\d{2}(?=[^\][]*])/ (デモ)
– Wiktor Stribiżew
2020 年 9 月 3 日 10:32
ありがとうございます!!あなたはその男です!
– ニットヌク
2020 年 9 月 3 日 10:40
------------------------
使用できます
(?<=Text\("List1:\[[^\][]*?)\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}(?=[^\][]*])
正規表現のデモをご覧ください
詳細
(?<=Text\("List1:\[[^\][]*?) - Text("List1:[ と角括弧以外の 0 個以上の文字 (可能な限り少ない) を必要とする肯定的な後読みできるだけ)現在の場所のすぐ左側
\d{4}-\d{2}-\d{2}\s\d{2}:\d{2} - 4 桁、-、2 桁、-、2 桁、空白、2 桁、 : と 2 桁
(?=[^\][]*]) - w の後に角括弧以外の 0 個以上の文字 (できるだけ多く) を必要とする正の先読み現在の場所のすぐ右にある ] 文字です。
コード例:
String Mystring ="\nText(\"List1:[2000-00-00 00:00, 2020-09-02 04:30, 2020-09-03 00:30, 2020-09-03 02:30, 2020-09-03 04:30, 2020-09-03 07:25, 2020-09-03 10:00, 2020-09-03 10:02],\nText(\"List2:[2000-00-00 00:00, 2020-09-02 04:30, 2020-09-03 00:30, 2020-09-03 02:30, 2020-09-03 04:30, 2020-09-03 07:25, 2020-09-03 10:00, 2020-09-03 10:02]";
RegExp regExp79 = new RegExp(r'(?<=Text\("List1:\[[^\][]*?)\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}(?=[^\][]*])');
print(regExp79.allMatches(Mystring).map((z) => z.group(0)).toList());
出力:
[2000-00-00 00:00, 2020-09-02 04:30, 2020-09-03 00:30, 2020-09-03 02:30, 2020-09-03 04:30, 2020-09-03 07:25, 2020-09-03 10:00, 2020-09-03 10:02]
4
ちょっとした質問ですが、出力に日付 (5 つ以上) がある場合 (2000-00-00 00:00、2020-09-02 04:30、2020-09-03 00:30、.. .、2020-09-03 10:00、2020-09-03 10:02)
– ニットヌク
2020 年 9 月 3 日 11:14
なぜ 、... があるのかわかりません。
– ニットヌク
2020 年 9 月 3 日 11:14
これは単なる表示の問題であり、リストには実際にはすべての項目が含まれています。 for (Match m in regExp79.allMatches(Mystring)) { print(m.group(0)); で簡単に確認できます。 }
– Wiktor Stribiżew
2020 年 9 月 3 日 11:16
奇妙です。すべてのデータがコードとともに適切にリストされていますが、出力を印刷すると、... が表示されます。そして、... のせいで、prefs.setStringList が機能せず、返されません。ヌル。ただし、この形式で手動で追加すると、 mylistdate = ['2000-00-00 00:00','2020-09-02 04:30', '2020-09 -03 00:30' ];仕事です
– ニットヌク
2020 年 9 月 3 日 11:37