Java 根据外观从字符串中删除单词

Java 根据外观从字符串中删除单词,java,regex,pattern-matching,Java,Regex,Pattern Matching,在某些情况下,我必须删除字符串中的单词。例如 我的字符串是incabcincdefinc.inc。为此,我需要删除inc.和inc。 即,输出应为incabcincdefinc。 即,根据以下条件移除所有incs: <space>inc<space> <space>inc<.> <space>inc<end string> <space>inc 公司 股份有限公司 股份有限公司 股份有限公司 您可能可以通过以下

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

<space>inc<space>
<space>inc<.>
<space>inc<end string>
<space>inc
公司
股份有限公司
股份有限公司
股份有限公司

您可能可以通过以下方式逃脱:

str = str.replaceAll("[ ](?:inc|ltd|corp)\\b\\.?", "");
方括号仅用于使两者之间的空格字符更加可见,只要保留空格,就可以省略它们。通过断言在业务实体扩展之后有一个单词边界(
\\b
),可以满足您的条件。这意味着下一步没有字母、数字或下划线(这将捕获您的所有条件)。然后,该模式还尝试包含一个文字句点(
\\.
),但不关心是否有非(
)。所有内容都替换为空字符串。请注意,在第一种情况下,我不匹配并删除空格,因为这会使
SomeCompanyinc
变成
SomeCompanyinc

如果希望不敏感地查找扩展名,则需要使用较长的语法:

Pattern pattern = Pattern.compile(
    "[ ](?:inc|ltd|corp)\\b\\.?",
    Pattern.CASE_INSENSITIVE
);
Matcher matcher = pattern.matcher(str);
str = matcher.replaceAll("");

另外,作为一个提示,您知道分隔符是什么,所以当您可以
拆分时,您不需要正则表达式。'inc'就是一个例子。实际上,我需要从公司名称中删除业务实体扩展,如inc,ltd,corp等。再次,
拆分
,循环生成的数组,继续您的生活。