2014-09-30 52 views
2

比方说,我有以下文字:是否可以替换正则表达式序列中的特定字符?

#Foo foo bar bar 
foo bar foo 
#bar Foo Foo 
foo bar 

比方说,我想在与#字符开头线-字符替换spacebars。所以输出应该是:

#Foo-foo-bar-bar 
foo bar foo 
#bar-Foo-Foo 
foo bar 

我知道我可以找到使用此正则表达式的那些行:

/^#(.*)$/gm 

但我实际上可以以任何方式改变那些$1序列?

P.S.我在记事本+ +中使用正则表达式来将一些数据从excel转换成代码(实际上非​​常方便)。

PS2我也必须替换文本中的一些制表符,并在Avinash Raj的答案中修改了一下后,我发现我可以使用这个正则表达式来做到这一点...除了它没有工作打算,但Avinash拉杰很不够用这个正则表达式帮助。

/(?:^#|(?<!^)\G)[\S ]*\K\t/gm 

DEMO

+0

您的预期输出是什么? – 2014-09-30 09:39:14

+0

@AvinashRaj有效的点,完全忘了那个(-_-;) – jahu 2014-09-30 09:40:03

+0

@AvinashRaj增加了预期的输出到问题 – jahu 2014-09-30 09:43:00

回答

4

我觉得记事本+ +将支持\G。主持人\G匹配前一场比赛结束的位置。

正则表达式:

(?:^#|(?<!^)\G)\S*\K[ \t]+ 

替换字符串:

- 

DEMO

如果你想与-取代个人的空间,然后尝试下面的正则表达式,

(?:^#|(?<!^)\G)\S*\K[ \t] 
+0

为什么'\ S'?它只是导致模式不能与'#foo \ t bar'一起使用。为什么'+'?这会将多个连续空格转换为单个短划线。 – 2014-09-30 09:49:01

+0

@Rawing我认为它现在适用于所有情况。或者简单地使用'\ h'而不是'[\ t]' – 2014-09-30 09:53:12

+2

+1,但你可以添加关于它如何工作的解释。 – Toto 2014-09-30 09:54:17