regex 使用lookaround在分隔的数字之间插入句点,但仅当数字不在单词的最末尾时

r8xiu3jd  于 2023-01-27  发布在  其他
关注(0)|答案(2)|浏览(91)

示例:

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

hpxqektj

hpxqektj1#

这将从问题中的示例字符串中执行所需的替换
匹配并捕获:

(?:(?<=\s)|(?<=\sv))(\d+)\s(?=\d)

替代:

$1.
  • (?:-非捕获组的开始
  • (?<=\s)-空格的正向后查找
  • |-或
  • (?<=\sv)-空白+v的正向后查找
  • )-非捕获基团末端
  • (\d+)\s-匹配并捕获后跟空格的1个或多个数字
  • (?=\d)-数字的正向前查找

Demo

7eumitmz

7eumitmz2#

如果你的正则表达式支持\K特性,我称之为可怜人的变量lookbehind,尝试\b\d+\K (?=\d),它会丢弃到那个点的所有匹配。
PCRE正则表达式

上的正则表达式101

相关问题