2017-01-08 157 views
2

我正在与正则表达式中的记事本++“patching_rect”后到前两个逗号之间的内容相匹配挣扎后匹配两个逗号之间内容:“在文本的这个一行:正则表达式的字符串

” [patching_rect 。

: “:[218.5,165.0,150.0,20.0,

在这种情况下所需的匹配为” 165.0"

我设法匹配第一对4与坐标

(?<="patching_rect" : \[).*?(?=,) 

但我想匹配第二个。谁能帮忙?

+0

你的意思是'patching_rect [1]'? –

+0

我需要用“0.0”替换“165.0”。但那165.0也可以是另一个数字。 –

+0

“patching_rect”是否保证出现在行首? – Tom

回答

2

我不会打扰lookbehinds。这是一个解决方案。有了这个

("patching_rect"\s*:\s*\[[^,]+,\s*)[^,]+ 

:替换此

${1}0.0 

这样做什么是很简单:

  • "patching_rect"\s*:\s*\[匹配的一切行动和包括[
  • [^,]+,\s*第一值相匹配和逗号以及下面的空格
  • [^,]+第二值

第一部分在$1捕获,并且在替换字符串重用匹配。

+1

您也可以使用'\ K'来省略所需匹配前的所有内容。 –

+1

@SebastianProske是的,好点。 OP:替换''patching_rect'\ s *:\ s * \ [[^,] +,\ s * \ K [^,] +'用'0.0' –

+0

完美!奇迹般有效。非常感谢! –

0

我想我知道了:诀窍是同样的事情,以取代该行的整体启动,然后后更换编号:

这正好在寻找:("patching_rect" ?: ?\[[^,]+,) ?([^,]+) 这正好替换:$1 0.0

问号在那里,以便空格是可选的,以防万一。