2016-12-04 102 views
2

我试图在记事本++中编写一个正则表达式,它将2个标记之间包含的所有空格替换为逗号。使用记事本++中某些标记之间的逗号替换空格

所以基本上,如果我有这样的输入:

<foo>bar bar bar</foo> 
<tag>bar bar bar</tag> 

而且我想只更换内部foo的标签空格获得resut:

<foo>bar,bar,bar</foo> 
<tag>bar bar bar</tag> 

匹配富之间的一切是相当简单:

(?<=(<foo>))(.*)(?=(<\/foo>)) 

但搜索\ s不起作用:

(?<=(<foo>))(\s)(?=(<\/foo>)) 
+0

尝试'(:\ G(^)| ?!)[^ <]*\K\s+' -->',',参见[DEMO](https://regex101.com/r/Hyq0Nm/1)。 –

+0

谢谢你Wiktor,发表你的答案作为评论,所以我可以接受它。 – Nefco

+0

或者只是[lookahead](http://www.regular-expressions.info/lookaround.html):['s(?= [^ <] *

回答

3

由于要更换标签内的空间,一直没有孩子,也没有相同的嵌套的标签,你可以使用

(?:\G(?!^)|<foo>)[^\s<]*\K\s+ 

regex demo,与,取代。

详细

  • (?:\G(?!^)|<foo>) - 无论是以前的成功匹配的结束或<foo>
  • [^\s<]* - 除空白,零个或多个符号和<
  • \K - 忽略文本相匹配,以便远
  • \s+ - 1个或多个空格。