java - 包含 2 个下划线和 3 个段的文件名的正则表达式

标签 java regex regex-lookarounds regex-group

我需要一个正则表达式表达式来从属性文件的文件列表中选择具有特定文件名格式的文件。
我需要选择文件名具有以下文件格式的文件:

<app_name>_<app_version>_<environment>.properties
  • 这里<app_name>可以是任何带有特殊字符的字母数字 <A-Z/a-z/0-9/special char>喜欢 abc123app1-1
  • 这里<app_version>可以是任何带有特殊字符的字母数字 <A-Z/a-z/0-9/special char/float value>喜欢 abc甚至浮点/整数/字符串 1.02或abc1
  • 这里<environment>可以是任何带有特殊字符的字母数字 <A-Z/a-z/0-9/special char>喜欢 production或产品1

它们通过 2 个下划线绑定(bind)在一起,如下所示:-

<A-Z/a-z/0-9/special char>_<A-Z/a-z/0-9/special char/float value>_<A-Z/a-z/0-9/special char>.properties

文件名始终包含2个下划线_ ,可以是下划线之间的任意字符串。
例如,以下是可以选择的有效文件名:

app1_1.0_prod1.properties
app2_2_prod2.properties
app_vers1_prod.properties
app-1_vers1_prod-2.properties
asd_efg_eee.properties

可以是字母、数字或特殊字符或它们之间的组合,位于下划线之间。
请注意,只能是2个下划线_在文件名中。
除 2 个下划线之外的任何内容 _不是有效的文件名,不会被选择,文件名应始终包含由 2 个下划线分隔的这 3 个部分 _
以下是无效文件名:

abc.properties
abc.123.efg.properties
as_1.efg.ddd.rr.properties
ee_rr.properties
_rr_.properties

我尝试了以下正则表达式:

[^_]*\\.[^_].properties  

但不工作。也许这是错误的。我没有得到这个的线索。 请帮助我创建这个正则表达式。
谢谢

最佳答案

我相信 /^[^_]+_[^_]+_[^_]+\.properties$/ 应该满足您的要求:

const tests = [
  'app1_1.0_prod1.properties',
  'app2_2_prod2.properties',
  'app_vers1_prod.properties',
  'asd_efg_eee.properties',
  'abc.properties',
  'abc.123.efg.properties',
  'as_1.efg.ddd.rr.properties',
  'ee_rr.properties',
  '_rr_.properties'
];

tests.forEach(test => { 
  console.log(test, /^[^_]+_[^_]+_[^_]+\.properties$/.test(test)); 
});

或者,您可以使用 /^([^_]+_){2}[^_]+\.properties$/

如果您想加强 . 的使用,那么我认为您需要

/^[^_.]+_([^_.]+|\d+(\.\d+)?)_[^_.]+\.properties$/

关于java - 包含 2 个下划线和 3 个段的文件名的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53750596/

相关文章:

javascript - 用于测试数字中加号或减号的正则表达式

c# - 使用正则表达式分组结构匹配字符串的各个部分

java - 值没有被填充到 gemfire 缓存中

java - String.replaceFirst 有时不会替换预期的字符串

java - 所有移动制造商的启动器图标上的 Android 徽章编号

Python正则表达式匹配: ## ##

javascript - 正则表达式和换行减号

java - 正则表达式:匹配逗号后不跟数字

java - 防止两次使用 SimpleDateFormatter

java - 向控制台输出一行 90 个等号,两边有空行