首页 > 解决方案 > 正则表达式查找带有 __ 和多个 _ 的字符串,然后 __ 以获得所需的输出

问题描述

我正在尝试创建一个正则表达式来查找一个带有双下划线__、多个下划线_和另一个双下划线的字符串,__并在最后一个分隔符之前提取部分__<string>
第一个分隔符应该是__,然后是多个_,字符串以__<String>

结果应该是第二个 __ 之前的字符串

示例1-UK__SATHISH_KUMAR__LONDON应该导致UK__SATHISH_KUMAR

示例2-UK__SATHISH_KUMAR_MALE__LONDON应该导致UK__SATHISH_KUMAR_MALE

public static final String RULE_FILE_NAME_PATTERN =
    "(([a-zA-Z]+)__(([a-zA-Z]+_[a-zA-Z]+_[a-zA-Z]+_[a-zA-Z]+)|([a-zA-Z]+_[a-zA-Z]+_[a-zA-Z]+)|([a-zA-Z]+_[a-zA-Z]+)|([a-zA-Z]+)))(__[\\w]+)*";

这种模式有效,但由于 sonarqube 很长而失败,有人可以帮助获得更短的正则表达式吗?

标签: javaregexscala

解决方案


  1. 抱歉,英国只是一个例子,它可以是任何字符 ENGLAND__SATHISH_KUMAR__LONDON

还是不清楚

假设它可以任何单词字符,至少一个,你可以使用

(\w+__.*)__

您的问题需要精确,因为您在声明为第一个分隔符 __ 之前返回字符 UK

假设你总是想要 2 个字符才能做

(\w{2}__.*)__

推荐阅读