2

在某些情况下,我必须删除字符串中的一个/多个单词。例如,我的字符串是incabcincdefinc inc. inc. 为此,我需要同时删除inc.inc。即,输出应该是incabcincdefinc. 即,inc根据以下条件删除所有 s:

<space>inc<space>
<space>inc<.>
<space>inc<end string>
<space>inc
4

1 回答 1

2

你可能可以摆脱这样的事情:

str = str.replaceAll("[ ](?:inc|ltd|corp)\\b\\.?", "");

方括号仅用于使中间的空格字符更明显,只要保留空格,就可以省略它们。通过断言\\b业务实体扩展后有一个单词边界 ( ) 来满足您的条件。这意味着接下来没有字母、数字或下划线(它会捕获您的所有条件)。然后该模式还尝试包含一个文字句点 ( \\.),但不关心是否有非 ( ?)。一切都替换为空字符串。请注意,在您的第一个条件中,我不匹配并删除空格,因为那会使SomeCompany inc incbecome SomeCompanyinc

如果要不区分大小写地查找扩展名,则需要使用更长的语法:

Pattern pattern = Pattern.compile(
    "[ ](?:inc|ltd|corp)\\b\\.?",
    Pattern.CASE_INSENSITIVE
);
Matcher matcher = pattern.matcher(str);
str = matcher.replaceAll("");
于 2012-11-18T12:49:12.233 回答