はじめに
文字の前後から空白文字を削除するのは簡単です
String text = ' text ';
// 前後の空白文字削除
print(text.trim());
// 前の空白文字削除
print(text.trimLeft());
// 後の空白文字削除
print(text.trimRight());
ですが、これでは文字の中に入っている空白文字を削除することができません
Dart でも正規表現使います
環境
- macOS Catalina バージョン 10.15.6
- Android Studio 4.0
flutter --version
Flutter 1.20.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 2ae34518b8 (10 days ago) • 2020-08-05 19:53:19 -0700
Engine • revision c8e3b94853
Tools • Dart 2.9.0
前提条件
- Flutter のセットアップ済み
- Flutter プロジェクト作成済み
いざ正規表現
以下を利用します
String text = ' te xt ';
print(text.replaceAll(RegExp(r'\s'), ''));
正規表現について
Dart は空白について、 Unicode White_Space プロパティ(バージョン6.2以降)と BOM 文字によって定義されているようなので、 \s
は、以下の文字にもマッチします
Name | Code point |
---|---|
CHARACTER TABULATION | U+0009 |
LINE FEED | U+000A |
LINE TABULATION | U+000B |
FORM FEED | U+000C |
CARRIAGE RETURN | U+000D |
SPACE | U+0020 |
NEXT LINE | U+0085 |
NO-BREAK SPACE | U+00A0 |
OGHAM SPACE MARK | U+1680 |
EN QUAD | U+2000 |
EM QUAD | U+2001 |
EN SPACE | U+2002 |
EM SPACE | U+2003 |
THREE-PER-EM SPACE | U+2004 |
FOUR-PER-EM SPACE | U+2005 |
SIX-PER-EM SPACE | U+2006 |
FIGURE SPACE | U+2007 |
PUNCTUATION SPACE | U+2008 |
THIN SPACE | U+2009 |
HAIR SPACE | U+200A |
LINE SEPARATOR | U+2028 |
PARAGRAPH SEPARATOR | U+2029 |
NARROW NO-BREAK SPACE | U+202F |
MEDIUM MATHEMATICAL SPACE | U+205F |
IDEOGRAPHIC SPACE | U+3000 |
実際に試してみると以下のようになります
final text = 'te\u0009\u000A\u000B\u000C\u000D\u0020\u0085\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFFxt'.replaceAll(RegExp(r'\s'), '');
print(text);
// 以下のような感じで出力されるはず
// flutter: text
// ただ、Unicode のバージョンによっては空白文字に U+0085 が含まれていないものがあるため
// その場合は以下のように表示されます(自分のiOSシミュレーターだったらこうなりました)
// flutter: te
xt
参考
おわりに
Dart でも正規表現使えて良いですね!
(正規表現何も分からない笑)