确保文件中某行存在的最佳方法是什么?

时间:2018-07-17 19:44:33

标签: regex sublimetext

例如我有

<Home/>
wall
none
</Home>

我在这里要做的是找出一种在其中添加“墙”的方法

<Home />

</Home>

然后确保它在文件中,如果没有,我需要添加它。

确保“墙”存在的最佳方法是什么?

我尝试使用的是正则表达式:

^(<Home />.*\n)([^.]+</Home>.*)$

,然后进行替换

$1 wall\n$2

如何将“ wall”添加到文件的该部分中,并确保它在那里就意味着如果该部分中已经没有任何变化?

1 个答案:

答案 0 :(得分:2)

您可以使用

class String
  Error = Class.new(StandardError)
  ParseError = Class.new(Error)
end

并替换为^(<Home\s*/>)((?:\R(?!(?:wall|</Home>)$).*)*\R</Home>)

请参见regex demo

详细信息

  • $1\nwall$2-一行的开头
  • ^-第1组:(<Home\s*/>),0+空格,<Home
  • />-第2组:
    • ((?:\R(?!(?:wall|</Home>)$).*)*\R</Home>)-0次以上连续出现
      • (?:\R(?!(?:wall|</Home>)$).*)*-一个换行符(\R(?!(?:wall|</Home>)$)),后面没有\Rwall作为整个行文本(借助负向前瞻{{1 }})
      • </Home>-除换行符外的任意0+个字符到行尾(尽可能多)
    • (?!(?:wall|</Home>)$)-换行符
    • .*-一个\R子字符串。

</Home></Home>是替换后向引用,它们引用第1组和第2组中捕获的值。