You can use
text.replaceAllMapped(RegExp(r'^([^,.]*[.,])|D+'), (Match m) =>
m[1] != null ? m[1].replaceAll(RegExp(r'[^0-9,.]+'), '') : '')
The ^([^.,]*[.,])|D+
regex matches
^([^,.]*[.,])
- start of string and then any chars other than ,
and .
and then a .
or ,
captured into Group 1
|
- or
D+
- any one or more non-digit chars.
If the first alternative matches, the ,
and .
should be preserved, so .replaceAll(RegExp(r'[^0-9,.]+'), '')
is used to remove all chars other than digits, .
and ,
.
If D+
matches, it means the first .
or ,
has already been matched, so the replacement for this alternative is an empty string.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…