【问题标题】:Regex expression to select file name with 2 dots from file list正则表达式从文件列表中选择带有 2 个点的文件名
【发布时间】:2018-10-20 01:03:51
【问题描述】:

我需要一个 regex 表达式,该表达式将从 zip 文件的文件列表中选择具有特定文件名格式的文件。
我需要选择文件名具有以下文件格式的文件:

<A-Z/a-z/0-9/special char>.<A-Z/a-z/0-9/special char>.zip

文件名包含两个点.,可以是点之间的任意字符串.
例如,以下是可以选择的有效文件名:

abc123.34efg.zip
qwe.123.zip
as_2ww.as_tyy.zip
23.fff.zip
asd.efg.zip

可以是字母数字特殊字符组合 之间他们,在点之间.
请注意,文件名中只能是 2 个点 .
除 2 个点 . 以外的任何内容都不是有效的文件名,不会被选中。

以下是无效文件名:

abc.zip
abc.123.efg.zip
as_1.efg.ddd.rr.zip
ee_rr.zip

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

[^.]*\\.[^.].zip     

但不工作。也许这是错误的。
请让我知道正确的正则表达式以选择所需的文件名

【问题讨论】:

  • 点之间只有一个字符,还是缺少*?最后一点也可能缺少反斜杠...
  • 你可能想要这个[^.]*\\.[^.]*\\.zip
  • 我不认为我之前的评论会起作用我认为以下会起作用[^\\.]+\\.[^\\.]+\\.zip
  • 格式为&lt;any string including number or/and sp char&gt;.&lt;any string including number or/and sp char&gt;.zip
  • 正则表达式在字符串中?你能试试我的回答吗?我认为它现在有效。如果没有,请告诉我。

标签: java regex


【解决方案1】:

你可以试试这个(假设你的正则表达式在 Java 字符串中,我放了双反斜杠。):

^[^.]+\\.[^.]+\\.zip$

另外,Xirema 指出的一个不错的选择

^(?:[^.]+\\.){2}zip$)

我在website 中对其进行了测试。使用此输入:

abc123.34efg.zip
qwe.123.zip
as_2ww.as_tyy.zip
23.fff.zip
asd.efg.zip
abc.zip
abc.123.efg.zip
as_1.efg.ddd.rr.zip
ee_rr.zip

也使用此输入进行了测试(感谢Matt.G

..zip
a..zip
.a.zip

【讨论】:

  • 它允许这些无效值..zip .a.zip a..zip
  • 您可以将其缩减为 ^(?:[^\.]+\.){2}zip$(或者,反斜杠转义后,^(?:[^\\.]+\\.){2}zip$),如果用户决定他们想要正好 3 或 4 个点,它的好处是更容易扩展正好是 2。
猜你喜欢
  • 1970-01-01
  • 2019-11-14
  • 2018-11-27
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 2020-10-19
  • 2022-10-22
  • 2020-06-09
相关资源
最近更新 更多