REGEX - 如何在文件名中找到两个连字符?

Posted

技术标签:

【中文标题】REGEX - 如何在文件名中找到两个连字符?【英文标题】:REGEX - How to find two hyphens in a filename? 【发布时间】:2019-08-11 09:44:53 【问题描述】:

我想搜索包含两个连字符的文件名(仅)。有些文件名有一个连字符,我只想要名称中带有两个连字符的文件名:

这个:一些文本 - 更多文本 - 还有更多.txt

不是这个:一些文本 - 更多 text.txt

连字符总是被一个空格 FWIW 包围。

我尝试使用(.*) - (.*) - (.*) 和几个变体,但结果不是我想要的。当我尝试各种组合时,要么一无所获,要么文件名只有一个连字符。

我知道这是一个显而易见的问题,但我已经尝试过有关 greedylook aheads 等的正则表达式教程,但终生无法解决这个问题。任何人都可以帮忙吗?我不只是在寻找解决方案——我想了解我在正则表达式语法中做错了什么。

【问题讨论】:

【参考方案1】:

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

^[^-]*(?:-[^-]*)2$

当写成扩展形式时,它看起来像这样,

^[^-]*-[^-]*-[^-]*$

这是您想要的方式,但我已通过使用量词将连字符的出现限制为仅两个来压缩它。

Demo

如果您想扩展您的正则表达式,只需将.* 更改为[^-]* 以使您的正则表达式成为这个,否则.* 将匹配额外的连字符,从而导致意外的匹配结果。

^([^-]*) - ([^-]*) - ([^-]*)$

请注意,您应该使用 start ^ 和 end $ 锚点来使文件名匹配整个正则表达式。

Demo with your modified regex

【讨论】:

效果很好。非常感谢您,特别是您的解释。 @ScottCoats:很高兴为您提供帮助 :) 如果对您有帮助,请考虑接受我的回答。您获得 +2 代表,它将帮助人们寻找类似帖子的解决方案。

以上是关于REGEX - 如何在文件名中找到两个连字符?的主要内容,如果未能解决你的问题,请参考以下文章

Python regex如何在字母和数字之间插入连字符;并删除两个字母之间的连字符

如何将 JSON 中的值替换为 RegEx 在使用 Python 的文件中找到的值?

JS中的RegEx找到没有3个相同的连续字符

如何在 C# 中与 Regex Class 匹配我部分知道的字符串?

使用 Java Regex,如何检查字符串是不是包含集合中的任何单词?

BASH:如何在 sed 命令中对字符串使用 Regex Negative Lookahead?