需要删除一起找到的两个单词后的所有内容。试图四处寻找类似的问题正则表达式用于在字符串“foo bar”后删除所有内容(包括多行)
str.replaceAll("foo bar(.*)", "")
似乎只删除第一行。
当我添加$到正则表达式的末尾(foo bar。* $ )它似乎没有选择任何东西?任何想法为什么?
谢谢
需要删除一起找到的两个单词后的所有内容。试图四处寻找类似的问题正则表达式用于在字符串“foo bar”后删除所有内容(包括多行)
str.replaceAll("foo bar(.*)", "")
似乎只删除第一行。
当我添加$到正则表达式的末尾(foo bar。* $ )它似乎没有选择任何东西?任何想法为什么?
谢谢
如果它是为寻找2个字那么简单,你可以使用indexOf
找到他们,然后使用substring
修剪字符串以放弃两个单词之后的所有内容。
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(。*)tester”;和它的工作。 –
使用Single Line Mode
匹配使用标记?s
。
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,你的答案是最好的,非常充分。 –
正则表达式匹配可以使用与索引版本相同的方式。您可以获得匹配的索引及其长度,然后像之前那样进行截断。这可能比让正则表达式比它更复杂更好。 –