holley 发表于 2022-9-15 12:17:32

文件重命名的正则求解【已解决】

本帖最后由 holley 于 2022-9-16 09:31 编辑

平时习惯使用Everything了,最近发现用它查找到文件后,在everything搜索窗口下,如果按F2复制过文件名,未使用esc而是不小心空白处点了一下,则文件名会变成搜索正则字符串,每操作1次增加1次,如:
正常文件名Everything.db
变成了:


caseregex.
caseregex[][][][][][][][][][]
这个问题不知道是属于bug还是正常情况,可能已经出现很久了
今天我发现有个文件的名称变成了这样:
caseregex_26.0.546.0_.7
于是想着能否正则重命名为正常文件,但折腾了一番,无啥效果

尤其是类似,怎么正常提取出小写字母?
目前还停留在
\[(.+)\]_.+_\[(.+)].

这个阶段,只能得到
_26.0.546.0_.7

求解求解~~~:face (2):

afan 发表于 2022-9-15 12:27:44

Local $sSource = 'caseregex_26.0.546.0_.7'
;~ MsgBox(0, '源字符串', $sSource)
Local $sSRERe = StringRegExpReplace($sSource, '(?i)(?:^caseregex)?\[(\w)\1\]', '${1}')
MsgBox(0, '替换结果', $sSRERe)

afan 发表于 2022-9-15 21:39:38

捕获[]内的一个字母为组名1,其旁边必须还有一个相同的字母(引用组1),再将这些一起替换成一个字母。
都是些较常用的,对照看看 StringRegExp 的帮助文档就好。编写表达式可能要发散思维,但写好了就像查字典一样好理解。除非懒得查。

holley 发表于 2022-9-16 09:45:27

afan 发表于 2022-9-15 21:39
捕获[]内的一个字母为组名1,其旁边必须还有一个相同的字母(引用组1),再将这些一起替换成一个字母。
都是 ...
(?!) 不区分大小写
(?:^caseregex)匹配除caseregex之外的字符
?\[(\w)\1\]匹配[]之间的常见字母、数字或下划线\1 这个反向引用 之前没懂

holley 发表于 2022-9-16 10:23:45

afan 发表于 2022-9-15 21:39
捕获[]内的一个字母为组名1,其旁边必须还有一个相同的字母(引用组1),再将这些一起替换成一个字母。
都是 ...


user3000 发表于 2022-9-17 08:20:24

(?:^caseregex)?
是整体,不是你分析那样“?\[(\w)\1\]”
页: [1]
查看完整版本: 文件重命名的正则求解【已解决】