我有一条像Folder1/File.png
这样的字符串形式的路径
但是在这个字符串中,有时如果文件被隐藏或文件夹被隐藏,我不希望它被我的正则表达式匹配。
regex = %r{([a-zA-Z0-9_ -]*)\/[^.]+$}
input_path = "Folder_1/.file" # This shouldn't be matched.
input_path = "Folder/file.png" # This should be matched.
但我的正则表达式适用于第一个输入,但它甚至不匹配第二个输入。
答案 0 :(得分:4)
您目前正在寻找\/[^.]+$
,即/
后跟除.
之外的任何字符,直至结束。由于文件名+扩展名格式具有.
字符,因此无法匹配第二种情况。
不要使用[^.]+$
,而只检查/
后面的字符不是.
,并在之后匹配所有内容:
([a-zA-Z0-9_ -]*)\/[^.].*$
答案 1 :(得分:2)
虽然这里有一些建议可行,但我的建议是
\/[^.][^\/\n]+$
它找到一个斜杠,后跟除了点之外的任何东西,后面依次是一个或多个除了斜杠或{{1 }}
要处理作为示例给出的两行,
newline
需要 8 步骤。
建议的一切都有效,但Folder_1/.file
Folder/file.png
采取 75 步骤,([a-zA-Z0-9_ -]*)\/[^.]
78 步骤,([a-zA-Z0-9_ -]*)\/[^.]+\.[^.]+\z
采取 77 步骤。
这可能完全无关紧要,我可能错过了一些角度,但我想提一下;)
答案 2 :(得分:0)
regex = %r{([a-zA-Z0-9_ -]*)\/[^.]}