REGEX - 如何在文件名中找到两个连字符?
REGEX - How to find two hyphens in a filename?
我想搜索包含两个连字符(仅)的文件名。有些文件名有一个连字符,我只想要名称中有两个连字符的文件名:
这:一些文字 - 更多文字 - 但 more.txt
不是这个:一些文本 - 更多 text.txt
连字符总是被 space 包围,FWIW。
我尝试使用 (.*) - (.*) - (.*)
和几个变体,但结果不是我想要的。当我尝试各种组合时,要么一无所获,要么文件名只有一个连字符。
我知道这是一个显而易见的问题,但我已经尝试浏览有关 greedy、look aheads 等的正则表达式教程,但是不能为我的生活解决这个问题。谁能帮忙?我不只是在寻找解决方案——我想了解我在正则表达式语法中做错了什么。
你可以使用这个正则表达式,
^[^-]*(?:-[^-]*){2}$
以扩展形式编写时,将如下所示,
^[^-]*-[^-]*-[^-]*$
这是您想要的方式,但我通过使用量词将连字符的出现限制为仅两个来压缩它。
如果您想扩展您的正则表达式,只需将 .*
更改为 [^-]*
以使您的正则表达式成为这样,否则 .*
也会匹配额外的连字符,从而导致意外的匹配结果。
^([^-]*) - ([^-]*) - ([^-]*)$
注意你应该使用开始 ^
和结束 $
锚来使文件名匹配整个正则表达式。
我想搜索包含两个连字符(仅)的文件名。有些文件名有一个连字符,我只想要名称中有两个连字符的文件名:
这:一些文字 - 更多文字 - 但 more.txt
不是这个:一些文本 - 更多 text.txt
连字符总是被 space 包围,FWIW。
我尝试使用 (.*) - (.*) - (.*)
和几个变体,但结果不是我想要的。当我尝试各种组合时,要么一无所获,要么文件名只有一个连字符。
我知道这是一个显而易见的问题,但我已经尝试浏览有关 greedy、look aheads 等的正则表达式教程,但是不能为我的生活解决这个问题。谁能帮忙?我不只是在寻找解决方案——我想了解我在正则表达式语法中做错了什么。
你可以使用这个正则表达式,
^[^-]*(?:-[^-]*){2}$
以扩展形式编写时,将如下所示,
^[^-]*-[^-]*-[^-]*$
这是您想要的方式,但我通过使用量词将连字符的出现限制为仅两个来压缩它。
如果您想扩展您的正则表达式,只需将 .*
更改为 [^-]*
以使您的正则表达式成为这样,否则 .*
也会匹配额外的连字符,从而导致意外的匹配结果。
^([^-]*) - ([^-]*) - ([^-]*)$
注意你应该使用开始 ^
和结束 $
锚来使文件名匹配整个正则表达式。