2

フォーム文字列からアルファベット以外のすべての文字をフィルタリングする正規表現を構築しようとしています。文字列に一重引用符が含まれている場合は、それをルールの例外として保持したいと考えています。

たとえば、私が入るとき

car's34

結果として得たい

car's

私が入るとき

*&* Lisa's car 0)*

私は手に入れたい

Lisa's

現時点ではこれを使用しています:

string.replaceAll("[^A-Za-z]", "")

ただし、アルファベットのみが表示され、必要な単一クォータが削除されました。

4

5 に答える 5

5

これは機能していませんか?

[^A-Za-z']

于 2013-08-20T20:43:10.157 に答える
5

これにより、「単語の一部」ではないアポストロフィも削除されます。

string = string.replaceAll("[^A-Za-z' ]+|(?<=^|\\W)'|'(?=\\W|$)", "")
    .replaceAll(" +", " ").trim();

これは最初に、保持したい文字のリストにアポストロフィを追加するだけですが、ルックアラウンドを使用して単語内にないアポストロフィを見つけます。

I'm a ' 123 & 'test'

になるだろう

I'm a test

単一のアポストロフィが削除され、アポストロフィの折り返しがどのように削除されたかに注意してくださいtest。ただし、I'm保持されています。


replaceAll()は、複数のスペースを単一のスペースに置き換えることです。これは、入力に単一のアポストロフィがある場合に発生します。trim()入力の最後に発生した場合に備えて、さらに への呼び出しが追加されました。

ここにテストがあります:

String string = "I'm a ' 123 & 'test'";
string = string.replaceAll("[^A-Za-z' ]+|(?<=^|\\W)'|'(?=\\W|$)", "").replaceAll(" +", " ").trim();
System.out.println(string);

出力:

I'm a test
于 2013-08-20T20:49:33.240 に答える
2

明らかな解決策は次のとおりです。

string.replaceAll("[^A-Za-z']", "")

あなたはもっと何かを望んでいると思います。

于 2013-08-20T20:42:57.233 に答える
1

@Bohemian には良いアイデアがありますが、ルックアラウンドではなく単語境界が必要です。

string.replaceAll("([^A-Za-z']|\B'|'\B)+", " ");
于 2013-08-20T22:41:23.770 に答える