如何合并两个正则表达式,捕获指定前缀与`nr`之间的内容用于Java?
正则合并方案
你现有两个正则分别适配两类字符串的捕获需求,可直接合并为同一个表达式,无需修改原有matcher.replaceAll("$1")的获取逻辑,具体实现如下:
合并后正则
(?:.*[sS]trony [Ll]okalne(?: GW -)? |GW -? ?)(.+)(?: nr.+)
实现逻辑是将两个正则的前置匹配规则作为可选分支放在同一非捕获组中,后续捕获组和后缀匹配逻辑保持不变,可覆盖所有测试场景。
可选优化(Java环境)
如果希望简化正则写法,编译时开启大小写不敏感模式即可,不需要手动写[sS]、[Ll]这类大小写兼容逻辑:
import java.util.regex.Matcher; import java.util.regex.Pattern; // 示例代码 Pattern pattern = Pattern.compile("(?:.*strony lokalne(?: gw -)? |gw -? ?)(.+)(?: nr.+)", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(yourInputStr); String cityName = matcher.replaceAll("$1");
如果待匹配内容存在换行,可额外追加Pattern.DOTALL模式,保证.可以匹配换行符。
内容的提问来源于stack exchange,提问作者menteith
相关产品推荐
相关产品推荐

