RegEx berfungsi dengan kotlin tetapi tidak berfungsi seperti yang diharapkan dengan dart [duplikat]
Dec 07 2020
Regex berfungsi dengan baik dalam kode kotlin:
var text = "Today, scientists confirmed the worst possible outcome: the massive asteroid will collide with Earth"
val encodeRegex = Regex("""'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+""")
val x= encodeRegex.findAll(text).map { result ->
result.value
}
print(x.toList())
Hasil:
[Today, ,, scientists, confirmed, the, worst, possible, outcome, :, the, massive, asteroid, will, collide, with, Earth]
Saya mencoba menggunakan regexp yang sama dengan flutter tetapi tidak berfungsi seperti yang diharapkan.
Kode panah:
final RegExp encodeRegex = RegExp(
r"""'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+""",
);
final text ='Today, scientists confirmed the worst possible outcome: the massive asteroid will collide with Earth';
final tokens = encodeRegex
.allMatches(text)
.map(
(element) =>
element.group(0),
)
.toList();
print('${tokens}');
Hasil:
[Today,, scientists, confirmed, the, worst, , ossible, outcome:, the, massive, asteroid, will, collide, with, Earth]
Jawaban
Iliya Dec 07 2020 at 02:53
Masalahnya adalah secara default ekspresi reguler tidak cocok dengan kategori unicode. Anda perlu menambahkan, unicode: true
agar ekspresi reguler cocok dengan mereka. Mencoba:
main(){
final RegExp encodeRegex = RegExp(
r"""'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+""", unicode: true
);
final text ='Today, scientists confirmed the worst possible outcome: the massive asteroid will collide with Earth';
final tokens = encodeRegex
.allMatches(text)
.map(
(element) =>
element.group(0),
)
.toList();
print('${tokens}');
}
Ia bekerja di DartPad. Jika unicode tidak diaktifkan, itu cocok p{L}
dan p{N}
sebagai pL literal dan pN.
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'