これがだまされた場合は申し訳ありませんが、検索を行いましたが、クエリに一致するものを見つけることができませんでした。
特定の文字列を見つけて置き換えるために複数の正規表現を実行するJavaのreplacer関数があります。
そのうちの1つは数値を調べており、数値が見つかると、たとえば周囲にスペースが追加されます。
test123> test 123
使用される正規表現は「(([0-9] +)」であり、「$ 1」に置き換えられます
いくつかのエッジケースでは、たとえばハッシュ名のように、特定の文字列から数値を分割する必要がないという問題が発生しました。そのため、特定のシーケンスに一致する場合を除き、数値の任意の組み合わせをスペースでラップするように正規表現を更新する必要があります。
たとえば、次の結果が必要です。
md5、sha1、sha256などの単語に一致するように否定的な後読みを使用してみましたが、それでも数値が分割されているようです。私は間違いを犯している単純なものだと確信しています... "((?!md5)(\ d +))"
したがって、基本的なルールは、文字列内にある数字は、shaまたはmdという単語が前にある場合を除き、スペースで囲む必要があります。数値とmdまたはshaの間にすでに空白がある場合は、空白を残す必要があります。shaまたはmdは、文字列の先頭であるか、空白またはanが前にある可能性があります。アンダースコア。ただし、長い単語の終わりや単語の途中であってはなりません。
ありがとう
別の方法として、以下を使用することもできます
(?<!\d|^)(?<!(?<![^\W_])(?:sha|md))(?=\d)|(?<=\d)(?!\d|$)|_
数字と数字以外の間の位置、またはアンダースコアと一致します。
右側に数字がある場合、その数字の前にある文字は、アンダースコアなしの単語char以外の文字が前に付いていないshaまたはmdであってはなりません。
説明
(?<!\d|^)
数字または文字列の先頭を振り返らない場合(?<!
振り返らないと
(?<![^\W_])
アンダースコア以外の文字charを振り返らない場合(?:sha|md)
一致SHAのか、MDオプションの数字が続きます)
後読みを閉じる(?=\d)
数字を直接右にアサートする|
または(?<=\d)(?!\d|$)
数字を振り返り、空白文字または文字列の終わりを楽しみにしていない場合|
または_
アンダースコアを一致させる例
String strings[] = {"Aisha256", "ai_sha256", "test123", "84test", "test md5", "sha256", "word two sha1", "w0rd", "test_md5", "sha256", "md5"};
for (String str : strings){
System.out.println(str.replaceAll("(?<!\\d|^)(?<!(?<![^\\W_])(?:sha|md))(?=\\d)|(?<=\\d)(?!\\d|$)|_", " "));
}
出力
Aisha 256
ai sha256
test 123
84 test
test md5
sha256
word two sha1
w 0 rd
test md5
sha256
md5
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加