0

私は次のような文字列を持っています:

"This is my abc.def ght.123 example 12.34 test"

次のように変更したいと思います。

"This is my \"abc def\" \"ght 123\" example 12.34 test"

Javaで正規表現を使用するにはどうすればよいですか?ありがとう伊佐

4

1 に答える 1

0

次のようなワンドットシーケンスしかない場合、abc.defまたはght.123次のことを試してください。

String input = "This is my abc.def ght.123 example 12.34 test";

input = input.replaceAll("\\b([a-zA-Z]+)\\.([a-zA-Z0-9]+)\\b", "\\\"$1 $2\\\"");

System.out.println( input );
//output: This is my "abc def" "ght 123" example 12.34 test

使用される表現は次のことを意味します。ドットが続く任意の文字シーケンスと文字または数字のシーケンス(これ\bは、(の一致を防ぐための単語境界_abc.defです。必要に応じて、文字クラスにアンダースコアを追加するか、削除することができます。\b)。

次に、置換により、一致が最初のグループのコンテンツであり、2番目のグループのコンテンツで\"$1 $2\"ある場所に置き換えられます。$1([a-zA-Z]+)$2([a-zA-Z0-9]+)

更新

必要な入力"This is my complexe string 12.34 ab.cd a+-.12 34.0+b zer.123.456 or 12.34.56 etc"(コメントを参照)には、次の式を使用できます。

(?i)(?<=^|\s)([a-z\+\-]+)\.([a-z0-9\+\-]+)(?=\s|$)

(?i)これは、式で大文字と小文字を区別しないことを意味します(?<=^|\s)。つまり、文字列の先頭または空白の後に(?=\s|$)一致することを意味し、空白または文字列の末尾が続く場合は一致することを意味します。

コア式はまだ([a-z\+\-]+)\.([a-z0-9\+\-]+)です。ご覧のとおり、文字クラスに追加+したのはとだけです(代わりに-書き込むことは可能ですが、マイナス文字の意味は文字クラス内の位置によって異なります)。より多くの文字をサポートしたい場合は、必要に応じてそれらを文字クラスに追加してください。のような事前定義された文字クラスの詳細については、ここここを参照してください。-\-\dp{L}

于 2012-05-04T08:26:24.467 に答える