如何用正则表达式匹配/后面有内容的字符串

匹配/后面有内容的文件夹名,如何用正则表达式实现呢

比如文件夹下的列表信息,匹配后三个(不匹配xxx和xxx/的文件夹名)

xxx/
xxx/123.txt
xxx/abc
xxx/abc/456.pdf

xxx\/.+

有个问题,换成\呢,/xxx\\.+/没反应

xxx
xxx\123.txt
xxx\abc
xxx\abc\456.pdf

我测试正常的,说一下具体环境?

https://regex101.com/ 测试,没问题

在Console测试字符串xxx\123.txt正常,测试xxx\123.txt不正常

环境是cmd运行7z命令行,显示压缩包列表,Switch -x排除字符串匹配内容
7z l C:\Users\Administrator\Desktop\test.7z -x![^\\]*\\.+

test.7z
https://lyscop.lanzouq.com/iwU9p011na3e

这个命令,它支持正则吗,好像默认是通配符吧。

这没有匹配结束符吧

部分匹配的话 6-2\2 就满足了

不知道是不是正则表达式,用下面的能去掉列表中有\的,包括\结尾的(比如xxx\),但是想保留xxx和xxx\
7z l C:\Users\Administrator\Desktop\test.7z -x!*\*

test.7z
新建文件夹
新建文本文档.txt
新建文件夹\新建文件夹(2)
新建文件夹\新建文件夹(2)\新建文本文档.txt

我感觉是通配符,* 代表一串文字,? 代表一个字符这样。

我不是很确定,只是大概查了一下。

是想显示的列表去掉多级文件夹、文件,只显示第一层文件夹、文件及数量,压缩包里面的文件结构未知的哦

那估计是通配符了,文档里面的例子是-x!temp.*,列表排除temp命名的文件

那通配符有办法排除列表结果中\结尾(xxx\和xxx),只匹配\在中间的么(xxx\123.txt)

不熟悉的领域,因为一般我都用正则,命令行也不了解。如果大胆猜一下的话……

xxx\?*

这样?!就是反斜线后面必须先有一个字符,然后随意。是这么想的,能不能有效就不知道了。

有效果耶,这个压缩包只有一个文件夹,但是显示的是文件夹名字最后一个\

?没懂。

不知道压缩包里面的文件和文件夹列表信息咋回事,比如第一层有个文件夹名字为xxx,然后用7z命令行显示列表

有的压缩包这个文件夹直接显示为xxx,有的显示为xxx\,有的直接不显示,但是这个文件夹存在

上面那个图就是第二个情况,显示为全弹幕下载_DF\

同不懂,刚才测试了一下,都不知道这些通配符怎么工作的 :joy:

估计是命令行运行后,对这个路径的文件,通过-x指令然后对文件筛选,然后做些处理

有个DotNet开源的的ZipFile,也是处理文件压缩和解压的,只支持zip文件,显示文件列表比7z功能要好,比如命令行显示文件、文件夹列表没这么坑

可以用管道命令吧,我记得powershell是一定支持的,cmd就不知道了

看了帮助,感觉可以根据这个功能做,把要压缩的文件都写进一个文本里,然后按照这个文本来压缩

Command Line Syntax

List file

You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by new line symbol(s).

For list files, 7-Zip uses UTF-8 encoding by default. You can change encoding using -scs switch.

Multiple list files are supported.

For example, if the file “listfile.txt” contains the following:

My programs\*.cpp
Src\*.cpp

then the command

7z a -tzip archive.zip @listfile.txt

adds to the archive “archive.zip” all “*.cpp” files from directories “My programs” and “Src”.

另外,7zip自带的help文件就有说通配符如何匹配的