Regex 使用vscode中的正则表达式删除特定位置的字符

Regex 使用vscode中的正则表达式删除特定位置的字符,regex,replace,visual-studio-code,Regex,Replace,Visual Studio Code,我有一个电话总机的多个文件日志,最近我的电话接线员改变了拨号方式,现在长途电话不需要拨0 example: original 12/12/16 15:25 *345 46 78968752 00:06'23 12/12/16 15:26 516 57 72668547 00:07'31 12/12/16 15:27 468 03 048846587 00

我有一个电话总机的多个文件日志,最近我的电话接线员改变了拨号方式,现在长途电话不需要拨0

example: original 12/12/16 15:25 *345 46 78968752 00:06'23 12/12/16 15:26 516 57 72668547 00:07'31 12/12/16 15:27 468 03 048846587 00:09'34 12/12/16 15:28 *516 08 058846587 00:03'45 replace with 12/12/16 15:25 *345 46 78968752 00:06'23 12/12/16 15:26 516 57 72668547 00:07'31 12/12/16 15:27 468 03 48846587 00:09'34 12/12/16 15:28 *516 08 58846587 00:03'45 例子: 起初的 12/12/16 15:25 *345 46 78968752 00:06'23 12/12/16 15:26 516 57 72668547 00:07'31 12/12/16 15:27 468 03 048846587 00:09'34 12/12/16 15:28 *516 08 058846587 00:03'45 取代 12/12/16 15:25 *345 46 78968752 00:06'23 12/12/16 15:26 516 57 72668547 00:07'31 12/12/16 15:27 468 03 48846587 00:09'34 12/12/16 15:28 *516 08 58846587 00:03'45
因此,我必须在第27位找到所有0,并将其删除,然后向前移动以下所有数字。正确的正则表达式和替换方法是什么

如果您的电话号码始终在可选0后8位,则此正则表达式有效:

并替换为
$1

在您下面的评论
0(\d{2,8})
生效后

或尝试

  (^[\S\s]{26})(0?)(.*)
如果第27个字符是0,则显式删除该字符

替换为
$1$3

在您发表上述评论后,请尝试:

(^[\S\s]{26})(?:(0)([\d]*)(\s))
替换为:

$1$3$4$4
[不幸的是,我明天才有时间进一步解释这一点。]

基本上,它使用的技巧是有条件地捕获单个空间-组4-是否在第27位有一个0。然后再添加一个第4组。这是因为如果位置27中没有0,组2、3和4仍然是空的

并在vscode中启用
PCRE2
设置。

您可以使用此选项

(\*\d{3}\s\d{2}\s)\[0\]+

不幸的是,这对我来说并不适用,日志中并非所有数字都有8位数字,这只是一个例子。我需要的是只删除位置27处的0个字符。那么,它们可能有多少个数字?当然有一个范围-只要它大于1,正则表达式就可以很容易地更改为工作状态。我通常不会要求追加投票,但随着目标的移动,我确实提供了三个工作正则表达式!;>}谢谢我还学到了一点关于假装条件替换的知识。我意识到我不能移动呼叫持续时间位置(行的最后一个数字),这个正则表达式变得非常复杂。如果你不想移动呼叫持续时间位置,可以用空格替换零。这对你有用吗?那么你的意思是现在删除的0必须替换为电话号码后的空格?确切地说,删除0并在号码后插入空格,大小可能会有所不同。但是,调用持续时间总是从位置58开始。我认为,如果不想计算位置,可以匹配一个“类似日期时间”的模式,后跟2和3位数字,并替换为第一个捕获组
(\d{1,2}/\d{1,2}/\d{2}\s+\d{2}:\d{2}\s+\*?\d{3}\s+\d{2}\s++0+
(\*\d{3}\s\d{2}\s)\[0\]+