匹配和排除单词/字符串的正则表达式

时间:2019-08-08 11:22:16

标签: java regex

我有类似的字符串

patric NY abc other
patric ny

预期的输出:patric nypatric NY

因此,patric ny是变化的语句,可能是地址。并且abc可能在那里。

因此,我想像ABC之前一样检索随机地址 并且如果ABC不存在,请输入完整的字符串。

我尝试了

(.+?(?=abc))

它给了我patric NY abc other的结果,却没有给patric ny的结果。

我们将不胜感激任何帮助。

2 个答案:

答案 0 :(得分:0)

提取方法

您可以使用

^(.*?)(?:\s+abc\b.*)?$

请参见regex demo

详细信息

  • ^-字符串的开头
  • (.*?)-捕获组1:除换行符以外的任何0+个字符,并且尽可能少
  • (?:\s+abc\b.*)?-一个可选的非捕获组,它与1+个空格,abc,单词边界以及除换行符以外的任意0+个字符匹配,且尽可能多
  • $-字符串的结尾。

替换方法

您可以只从字符串中删除1个以上的空格,abc和其余的空格:

String result = input.replaceFirst("(?s)\\s+abc.*", "");

或者,如果abc是一个完整的单词:

String result = input.replaceFirst("(?s)\\s+abc\\b.*", "");

请参见regex demo

replaceFirst()匹配该模式的第一个匹配项并将其删除。

模式详细信息

  • (?s)-DOTALL标志使.与任何字符匹配
  • \s+-超过1个空格
  • abc-一个abc子字符串
  • \b-单词边界
  • .*-字符串的其余部分

答案 1 :(得分:0)

您可以尝试以下操作:

intput.replaceFirst("(patric (?:NY|ny)) ((?:abc|ABC).*)","$1")