示例:
RP Distort2 1 0 0b.exe
AFakeFilename4 5 0 2 SEP2 5 63 8
A4 5 8 7 6 COM99 6 4 4 1
应改为:
RP Distort2 1.0.0b.exe
AFakeFilename4 5.0.2 SEP2 5.63.8
A4 5.8.7.6 COM99 6.4.4.1
我现在的表达是:
(?<=\d) (?=\d)
Replacement: .
现在我的表达式只起部分作用。它在 * 所有 * 空格的数字之间插入句点。例如:RP Distort2 1 0 0b.exe
在应该是RP Distort2 1.0.0b.exe
时变成了RP Distort2.1.0.0b.exe
我不是一个RegEx向导,所以这让我有点困惑。我也从另一个网站得到了我的表达式-我知道它使用了lookaround,但我不完全理解lookaround的语法。
我在den4b Renamer (beta3)中使用这个表达式,它现在完全支持lookaround。
如何修改表达式以实现此处所需的效果?
任何帮助都将不胜感激。
编辑:
我还想添加一个附加条件,如果一个数字紧跟在单个v
之后,即:TestSoftware v1 5 5
,这不应算作"在单词末尾"(例外),结果应为TestSoftware v1.5.5
。
2条答案
按热度按时间hpxqektj1#
这将从问题中的示例字符串中执行所需的替换
匹配并捕获:
替代:
(?:
-非捕获组的开始(?<=\s)
-空格的正向后查找|
-或(?<=\sv)
-空白+v
的正向后查找)
-非捕获基团末端(\d+)\s
-匹配并捕获后跟空格的1个或多个数字(?=\d)
-数字的正向前查找Demo
7eumitmz2#
如果你的正则表达式支持\K特性,我称之为可怜人的变量lookbehind,尝试
\b\d+\K (?=\d)
,它会丢弃到那个点的所有匹配。PCRE正则表达式
上的正则表达式101