私は次のような文字列を持っています:
"This is my abc.def ght.123 example 12.34 test"
次のように変更したいと思います。
"This is my \"abc def\" \"ght 123\" example 12.34 test"
Javaで正規表現を使用するにはどうすればよいですか?ありがとう伊佐
私は次のような文字列を持っています:
"This is my abc.def ght.123 example 12.34 test"
次のように変更したいと思います。
"This is my \"abc def\" \"ght 123\" example 12.34 test"
Javaで正規表現を使用するにはどうすればよいですか?ありがとう伊佐
次のようなワンドットシーケンスしかない場合、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\+\-]+)
です。ご覧のとおり、文字クラスに追加+
したのはとだけです(代わりに-
書き込むことは可能ですが、マイナス文字の意味は文字クラス内の位置によって異なります)。より多くの文字をサポートしたい場合は、必要に応じてそれらを文字クラスに追加してください。のような事前定義された文字クラスの詳細については、こことここを参照してください。-
\-
\d
p{L}