Regex(Notepad ++) - 找到并替换每行第二次出现的字符

时间:2016-07-15 09:23:40

标签: regex notepad++

我想将每行中的第二个正斜杠更改为逗号。

我找到了各种帖子,并设法从他们那里得到了一种方法,但它没有按照我的意愿去做。

Initial attempt - 我认为我需要更换2个分隔符

1st "Replace 2nd occurrence" - 发现这篇文章似乎更容易了。

2nd "Replace 2nd occurrence" - 在这里使用正则表达式作为我的基础。

我在做什么;

查找:

^(.*?)\/(.*?)\/

替换:

$&,

导致更改我的数据;

042146/OVERNIGHT/HSSC825571,started,14/07/2016,00:00:56,V0700LWHSB 042146/OVERNIGHT/HSSC825571,ended,14/07/2016,00:00:56, 042147/OVERNIGHT/HSSC825571,started,14/07/2016,00:00:58,V0700LWHSB 042147/OVERNIGHT/HSSC825571,ended,14/07/2016,00:00:58,

要;

042146/OVERNIGHT/,HSSC825571,started,14/07/2016,00:00:56,V0700LWHSB 042146/OVERNIGHT/,HSSC825571,ended,14/07/2016,00:00:56, 042147/OVERNIGHT/,HSSC825571,started,14/07/2016,00:00:58,V0700LWHSB 042147/OVERNIGHT/,HSSC825571,ended,14/07/2016,00:00:58,

有没有办法只更换第二个/?

我的数据的一组示例是;

042146/OVERNIGHT/HSSC825571,started,14/07/2016,00:00:56,V0700LWHSB 042146/OVERNIGHT/HSSC825571,ended,14/07/2016,00:00:56, 042147/OVERNIGHT/HSSC825571,started,14/07/2016,00:00:58,V0700LWHSB 042147/OVERNIGHT/HSSC825571,ended,14/07/2016,00:00:58, 042154/TEMP56/QPADEV000M,started,14/07/2016,00:01:02,V0700LRFIN 042154/TEMP56/QPADEV000M,ended,14/07/2016,00:07:12, 042155/JMALICKA/QPADEV000N,started,14/07/2016,00:01:05,V0700LRFIN 042155/JMALICKA/QPADEV000N,ended,14/07/2016,00:06:53, 042156/DG8SVCPRF/DG8SVC,started,14/07/2016,00:01:15,DATAGATE 042156/DG8SVCPRF/DG8SVC,ended,14/07/2016,00:12:01, 042157/OVERNIGHT/RCPTDISCRP,started,14/07/2016,00:01:42,V0700LBATC 042157/OVERNIGHT/RCPTDISCRP,ended,14/07/2016,00:01:44, 042158/QTCP/QTSMTPCLTP,started,14/07/2016,00:01:53,QSYSWRK 042158/QTCP/QTSMTPCLTP,ended,14/07/2016,01:29:08, 042159/QTCP/QTSMTPCLTP,started,14/07/2016,00:01:53,QSYSWRK 042159/QTCP/QTSMTPCLTP,ended,14/07/2016,00:19:05,

2 个答案:

答案 0 :(得分:2)

  • 控制 + ħ
  • 找到:^([^/]+/[^/]+)/
  • 替换为:$1,
  • 全部替换

这将用逗号替换每行的第二个斜杠。

答案 1 :(得分:1)

你快到了。您只需要使用以下内容更改替换字符串:

$1/$2,

如何运作

你的正则表达式是:^(.*?)\/(.*?)\/ 在Notepad ++的替换字符串中,美元符号用于表示正则表达式中括号括起来的组。

  • $1指的是第一个组,(.*?)位于该行的开头,由^字符指定。
  • $2指的是第二组,也是(.*?),但它位于第一个/之后。

由于您不想替换第一个斜杠,因此在替换字符串的开头需要$1/$2。但是,由于第二组之后是另一个/(第二个在线),您需要将其替换为,。这就是替换字符串必须是$1/$2,的原因。请注意,()所包含的所有字符都需要在替换字符串中重写。否则,它们只是被省略(尝试替换字符串$1$2,你会明白我的意思。)

在其他编辑器或编程语言中,有时会使用$(有时加倍)代替\符号来引用括号组。因此,您可以将\\1/\\2,\1/\2,作为替换字符串而不是$1/$2,