我有类似的字符串
patric NY abc other
patric ny
预期的输出:patric ny
和patric NY
。
因此,patric ny
是变化的语句,可能是地址。并且abc
可能在那里。
因此,我想像ABC
之前一样检索随机地址
并且如果ABC
不存在,请输入完整的字符串。
我尝试了
(.+?(?=abc))
它给了我patric NY abc other
的结果,却没有给patric ny
的结果。
我们将不胜感激任何帮助。
答案 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")