如何在 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 个字符(如第四只鸟所建议)
我正在尝试匹配字符串“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 个字符(如第四只鸟所建议)