25

我有一个文件,其中包含一些逗号分隔的名称和一些逗号分隔的帐号。
名称将永远是类似的东西和类似Dow, John的数字012394,19862

使用Notepad++的“正则表达式查找”功能,我想用管道替换数字之间的逗号|

基本上 :

turn:  Dow,John      into:  Dow,John
       12345,09876          12345|09876
       13568,08642          13568|08642

我一直在用[0-9],它来查找逗号,但我无法让它正确地留下数字的最后一位数字并只替换逗号

有任何想法吗?

4

4 回答 4

33

搜索([0-9]),并将其替换为\1|. 那样有用吗?

于 2012-10-31T18:27:52.853 回答
12

使用这个正则表达式

(\d),(\d)

并将其替换为

$1|$2

或者

\1|\2
于 2012-10-31T18:26:31.300 回答
3

(?<=\d),应该管用。奇怪的是,这仅在我使用全部替换时才有效,但在我使用替换单时无效。作为替代方案,您可以使用(\d),并替换为$1|

于 2012-10-31T18:27:26.293 回答
0

关于只替换部分比赛的一般想法

为了替换匹配的一部分,您需要 1) 使用正则表达式模式中的捕获组和对替换模式中保留的组值的反向引用,或 2) 环视,或 3)\K丢弃左手的运算符语境。

所以,如果你有一个类似的字符串a = 10,并且你想a =用,比如,替换后面的数字500,你可以

  • 查找(a =)\d+并替换为\1500/ ${1}500(如果你使用$n反向引用语法并且后面跟着一个数字,你应该用大括号括起来)
  • 查找(?<=a =)\d+并替换为500(因为(?<=...)是一种非消耗性的正向后向模式,并且它匹配的文本不会添加到匹配值中,因此不会被替换)
  • 查找a =\K\d+并替换为500(where\K使正则表达式引擎“忘记”文本已匹配到该\K位置,使其类似于后视解决方案,但允许任何量词,例如即使之间有任何零个或多个水平空格也a\h*=\K\d+将匹配和)。a =a=

当前问题解决方案

为了替换两位数之间的任何逗号,您应该使用环视:

查找内容(?<=\d),(?=\d)
替换为|

详情

  • (?<=\d)- 一个积极的向后看,需要一个数字紧挨当前位置的左边
  • ,- 一个逗号
  • (?=\d)- 正向前瞻,需要在当前位置右侧立即有一个数字。

请参阅带有设置的演示屏幕截图:

在此处输入图像描述

请参阅正则表达式演示

变化

查找内容(\d),(?=\d)
替换为\1|

查找内容\d\K,(?=\d)
替换为|

注意:如果有逗号分隔的单个数字,例如1,2,3,4你不能使用(\d),(\d),因为这只会匹配奇数出现(见我的意思)。

于 2022-01-26T09:52:31.353 回答