Javaの正規表現(RegEx)を使って文字列内の特殊文字をすべて末尾に移動する方法
次の正規表現は、英字・数字・空白以外のすべての特殊文字にマッチします。つまり、英語のアルファベット、スペース、数字を除く全ての文字を検出できます。
"[^a-zA-Z0-9\\s+]"
文字列内の特殊文字をすべて末尾へ移動するには、まずこの正規表現を使って特殊文字を検出し、見つかったものを順番に1つの空文字列へ連結していきます。同時に、特殊文字以外の残りの文字を別の文字列へ連結し、最後にこの2つの文字列を結合することで目的の結果が得られます。
ここでは、2つの実装方法を紹介します。
例1:charAt()メソッドとmatches()メソッドを使う方法
1文字ずつ取り出して正規表現と照合し、特殊文字かどうかを判定するシンプルな方法です。
public class RemovingSpecialCharacters {
public static void main(String args[]) {
String input = "sample # text * with & special@ characters";
String regex = "[^a-zA-Z0-9\\s+]";
String specialChars = "";
String inputData = "";
for(int i=0; i< input.length(); i++) {
char ch = input.charAt(i);
if(String.valueOf(ch).matches(regex)) {
specialChars = specialChars + ch;
} else {
inputData = inputData + ch;
}
}
System.out.println("Result: "+inputData+specialChars);
}
}実行結果
Result: sample text with special characters#*&@
このコードでは、入力文字列を先頭から1文字ずつ走査し、正規表現にマッチした文字(特殊文字)はspecialCharsへ、それ以外の文字はinputDataへそれぞれ連結しています。最後に両者を結合して出力することで、特殊文字だけが文字列の末尾に集まった状態になります。
例2:java.util.regexパッケージを使う方法
続いて、Regexパッケージ(java.util.regex)が提供するPatternクラスとMatcherクラスのメソッドを利用して、文字列内の特殊文字を末尾へ移動するJavaプログラムを紹介します。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String args[]) {
String input = "sample # text * with & special@ characters";
String regex = "[^a-zA-Z0-9\\s+]";
String specialChars = "";
System.out.println("Input string: \n"+input);
// パターンオブジェクトを作成
Pattern pattern = Pattern.compile(regex);
// コンパイル済みパターンで文字列をマッチング
Matcher matcher = pattern.matcher(input);
// 空のStringBufferを作成
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
specialChars = specialChars+matcher.group();
matcher.appendReplacement(sb, "");
}
matcher.appendTail(sb);
System.out.println("Result: \n"+ sb.toString()+specialChars );
}
}実行結果
Input string: sample # text * with & special@ characters Result: sample text with special characters#*&@
この方法では、Pattern.compile()で正規表現をコンパイルし、Matcherのfind()メソッドで特殊文字を順に検出します。マッチした文字はmatcher.group()で取得してspecialCharsに蓄積し、appendReplacement()で元の位置から削除します。最後にappendTail()で残りの部分を追加すれば、特殊文字が末尾にまとめられた文字列が完成します。
どちらの方法でも同じ結果が得られますが、長い文字列を扱う場合は、Pattern・Matcherを使った例2の方が効率的です。また、実運用では文字列連結の代わりにStringBuilderやStringBufferを使用すると、さらにパフォーマンスが向上します。
-
Pythonの正規表現で文字列内のすべての数値を抽出する方法
テキストから数値だけを取り出す処理は、Pythonによるデータ分析において非常によくある要件です。Pythonの正規表現ライブラリ「re」モジュールを使えば、この処理を簡単に実現できます。正規表現ライブラリでは、数字にマッチするパターンを定義し、そのパターンに合致する部分を部分文字列として抽出できます。基本的な例以下の例では、reモジュールが提供するfindall()関数を使用しています。この関数には、抽出したいパターンと、抽出元となる文字列の2つの引数を渡します。なお、下記の例では整数部分のみが取得され、小数点や負の符号は含まれない点に注意してください。import re str = inp
-
【Python】正規表現で文字列の末尾にマッチさせる方法
文字列の末尾にマッチさせるには Pythonのreモジュールを使うと、正規表現によって文字列の末尾にある特定のパターンを簡単に抽出できます。文字列の最後に一致させるには、正規表現のメタ文字である $ を使用します。 $ は「文字列の終わり」を表す特殊文字です。パターンの末尾にこの記号を付けることで、文字列の最後にある単語だけをマッチさせることができます。 以下のコードでは、文字列「cheer leaders at the football stadium」の末尾にある単語「stadium」をマッチさせています。 コード例 import re s = cheer leaders at the