如果String X包含String Y,则返回包含String Y的整个单词。想法是RegEx需要确定整个单词是什么,我认为正则表达式会查找空格
String whole = "BARA BERE";
String part = "BAR";
if (whole.contains(part)) {
result = whole.replaceAll("\\bBAR", "");
System.out.println(result);
}
输出应为: BARA
Q1:这种情况下的正则表达式是什么?
Q2:如果单词是由新行分隔的,那么正则表达式是什么?
答案 0 :(得分:2)
如果您正在搜索某个字词,则不应使用.replaceAll()
,而应使用.find()
。由于您至少指定了我的解释)“单词”应该以最近的空白字符结尾,您可以这样做:
Pattern regex = Pattern.compile("\\bBAR\\S*");
Matcher regexMatcher = regex.matcher(whole);
if (regexMatcher.find()) {
part = regexMatcher.group();
}
\S*
匹配零个或多个非空格字符(也不包括换行符)。
如果您想允许空格但禁止在“字词”中添加换行符,请使用[^\r\n]
代替\S
。
答案 1 :(得分:1)
与此正则表达式匹配:
(?=\S*?BAR)\S+
这断言非空格序列包括" BAR" 这个词。
String whole = "foo foobar barfoo baz";
String part = "foo";
Matcher matcher = Pattern.compile("(?=\\S*?" + part + ")\\S+").matcher(whole);
while (matcher.find()) {
System.out.println(matcher.group());
}
你得到:
FOO
foobar的
barfoo
如果您的字符串包含元字符,您还可以使用\Q\E
引用文字部分:
(?=\S*?\Q%s\E)\S+
String whole = "Dr Smith.";
String part = "th.";
Matcher matcher = Pattern.compile(String.format("(?=\\S*?\\Q%s\\E)\\S+", part)).matcher(whole);
while (matcher.find()) {
System.out.println(matcher.group());
}
答案 2 :(得分:0)
正则表达式必须是
\bBAR\w*?\b
\b
断言一个单词边界。
此处假设part
字符串为BAR
。*?以懒惰的方式匹配任意数量的字符。直到它找到下一个单词边界\b