一緒に見つかった2つの単語の後にすべてを削除する必要があります。類似の質問を探してみよう文字列 "foo bar"の後にすべてを削除する正規表現
str.replaceAll("foo bar(.*)", "")
最初の行だけを削除しているようです。
$を正規表現の末尾に追加すると(foo bar。* $ )、何も選択しないようですか?なぜどんなアイデア?
ありがとう
一緒に見つかった2つの単語の後にすべてを削除する必要があります。類似の質問を探してみよう文字列 "foo bar"の後にすべてを削除する正規表現
str.replaceAll("foo bar(.*)", "")
最初の行だけを削除しているようです。
$を正規表現の末尾に追加すると(foo bar。* $ )、何も選択しないようですか?なぜどんなアイデア?
ありがとう
それは2つの単語を見つけるのと同じくらい簡単だ場合、あなたはそれらを見つけるためにindexOf
を使用することができ、その後、 substring
を使用して文字列をトリミングし、2つの単語の後のすべてを削除します。
String keyWord = "key word";
String input = "some\ntext\nkey word is here\nand more text\nto follow";
int pos = input.indexOf(keyWord);
if (pos != -1) {
String trimmed = input.substring(0, pos + keyWord.length());
System.err.println("'" + trimmed + "'");
}
上記のコードでは、キーワードを維持したいと仮定しています。もしそれを残したくなければ、+ keyword.length()
をsubstring
にドロップしてください。
正規表現を使用する場合は、Pattern.DOTALL
フラグを渡して、ドットマッチラインの終端を設定します。また、あなたは残しておきたいものをキャプチャするために正規表現を変更する必要はなく、あなたが(あなたの例がそれを持っているとして)破棄したいもの:
String keyWordRegex = "key\\s+word";
Pattern pattern = Pattern.compile("(.*\\b" + keyWordRegex + "\\b).*", Pattern.DOTALL);
Matcher matcher = pattern.matcher(input);
String replaced = matcher.replaceAll("$1");
System.err.println("'" + replaced + "'");
正規表現は次のように動作します。
正規表現を使用する必要はありません。簡単な文字列操作の概念を使用することができます。
String str = "testing test foo bar test foo bar test \n testing all \n foo bar(.*) tester";
String boundaryValueText = "foo bar";
int boundaryValueIndex = str.indexOf(boundaryValueText);
String parsedContent = boundaryValueIndex != -1 ? new StringBuilder(str)
.delete(boundaryValueIndex + boundaryValueText.length(), str.length()).toString() : str;
おかげで、例のマルチラインのサポートを追加..Will。 –
動作しない入力を提供できますか? –
私はString str = "foo bar(。*)test foo bar(。*)test \ nすべてのfoo bar(。*)テスターをテストしました。とその働き。 –
フラグ?s
を用いSingle Line Mode
マッチングを使用します。
str = str.replaceAll("(?s)foo bar(.*)", "");
正規表現を使用することは必須ではありません場合は、単に次のように使用することができます。
str = str.indexOf("foo bar") == -1 ? str : str.substring(0, str.indexOf("foo bar"));
あなたは以下の解決策を試すことができます。 foo bar
の後にすべての文字が削除されています。
String a = "hell fdshf fdfjk foo bar ffsd fsajkh vsfdsv" ;
String as = a.split("foo bar")[0];
System.out.println(as);
出力
hell fdshf fdfjk
こんにちはchirag、あなたの答えは最高です。 –
正規表現マッチは、インデックス付きバージョンと同じ方法で使用できます。一致のインデックスとその長さを取得してから、前と同じように切り捨てを行うことができます。それはおそらく、正規表現をもっと複雑にするよりも優れています。 –