使用RegEx存储整个单词

时间:2014-10-12 10:30:50

标签: java regex

如果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:如果单词是由新行分隔的,那么正则表达式是什么?

3 个答案:

答案 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
  foob​​ar的
  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