【问题标题】:Regex expression for validating file format用于验证文件格式的正则表达式
【发布时间】:2018-06-25 18:19:42
【问题描述】:

我正在寻找正则表达式。我确实搜索了一些旧帖子,发现部分匹配。但仍在寻找剩下的一个。 我想验证以下文件目录结构,它仅以这种格式给出,我从构建属性文件中读取。 ${abc.xyz.install.ClassDir}\abc\xyz\xyz.class

  1. 我找不到任何正则表达式如何验证 ${abc.def.install.ClassDir} 目录结构。

  2. 我发现正则表达式可以从这一点验证 \abc\xyz\xyz.class 有点像这样 ^(\[a-z_A-Z\-\s0-9\.]+)+.(class|)$

你能帮我如何找到正则表达式来验证 ${abc.def.install.ClassDir}

我的python正在读取这种格式,最后我想把这个正则表达式验证放在python中。

提前感谢您的帮助!

【问题讨论】:

  • 试图理解:你想匹配${abc.xyz.install.ClassDir}\abc\xyz\xyz.class格式的字符串,其中abcxyz都可以是任何字母数字字符或下划线?
  • 是的,这是正确的。

标签: java python


【解决方案1】:

你可以使用这个正则表达式:

\${(\w+)\.\w+\.install\.ClassDir}\\\1\\(\w+)\\\2\.class

(你可以try it out at regex101.com。)

在这个公式中,我们使用反向引用(\1\2)确保 abcs 匹配和 xyzs 匹配。 def 仅使用一次,因此我们不会再次检查它。

请注意,这是原始的正则表达式。如果你想在 Java 中使用它,你需要把它放在一个字符串中,这意味着转义特殊字符。在这种情况下,您需要将反斜杠加倍:

"\\${(\\w+)\\.\\w+\\.install\\.ClassDir}\\\\\\1\\\\(\\w+)\\\\\\2\\.class"

如果文件夹名称不需要匹配,请将\1\2替换为\w+

\${\w+\.\w+\.install\.ClassDir}\\\w+\\\w+\\\w+\.class

您需要以同样的方式对字符串进行转义。

【讨论】:

  • 非常感谢您的超快速响应。只有一件事(对不起,我没有正确提及) abc 和 xyz 只是我给出的任意文件夹名称,我不想成为 abc 和 xyz 应该匹配或按该顺序。现在字符串不匹配,因为我的实际文件夹名称不同。
  • 实际上我应该像这样提到我的字符串 ${abc.def.install.ClassDir}\ghi\jkl\xyz.class
  • 没问题。我添加了一个替代方案。
  • 很高兴它成功了!您可以点击答案旁边的复选框以接受它。