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

标签 java regex pattern-matching

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

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

最佳答案

你可能可以逃脱这样的惩罚:

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

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

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

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

关于java - 根据外观从字符串中删除单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13439953/

相关文章:

scala - Scala 案例模式是一等的吗?

java - 模式 "Form 1987A"的正则表达式

java - 安卓/PhoneGap : Using third-party libraries in plugin-development

java - 在 Java 中使用 SQLITE_OPEN_NOMUTEX 标志打开数据库连接

Java jTable 来自 ArrayList 对象的数据并通过其他方法更新

python - 使用正则表达式查找括号之间的特定字符串(包括括号)

python - 删除特定代码块中的所有转义序列

java - Guice 注入(inject)通用列表

iOS 电子邮件地址验证不接受 .in

java - 替换字符串中的模式匹配