如何在 Dart/Flutter 中使用正则表达式匹配包含 ä(带有变音符号的 a)的字符串?

How can I match a string containing ä (a with umlaut) using regex in Dart/Flutter?

我正在尝试匹配字符串“06 März 2021”,我正在尝试使用正则表达式:

r"(\d{1,2})\W(\p{L}{3,20})\W(\d{4})"

我试着告诉 Regex 使用 Unicode:

RegExp(datePattern, unicode: true);

但这对 ä 不起作用。不过它适用于其他一些重音字符。

不胜感激。 谢谢

调试显示 ä 被视为 2 个字符,a 后跟元音符号。

因为以下 2 个字符串不相同(除非 Whosebug 弄乱了我输入的文本):

März
März

在第一种情况下,ä 由 2 个字符组成,即 a 和变音符号。在第二个中,它是一个字符。这可以通过打印 2 个字符串的长度来检查(第一个是 5,第二个是 4)。

找到这个 link 后: https://www.regular-expressions.info/unicode.html#category

我意识到我需要将字符的标记 class 添加到正则表达式中,所以我最终得到的是:

r"(\d{1,2})\s([\p{L}\p{M}]{3,20})\s(\d{4})"

另一种方法是使用规范分解,然后使用 https://pub.dev/packages/unorm_dart

对字符串进行规范组合

这会将第二个字符串变成第一个字符串(使用单个字符代替 ä 而不是 2)。

注意:这适用于带有变音符号的字母,但我不知道它可能适用于哪些其他重音字母。

编辑: 将正则表达式中的 \W 替换为 \s,因此它只匹配 space 个字符(如第四只鸟所建议)