使用正则表达式删除后清理格式

时间:2017-01-30 07:07:06

标签: regex notepad++

我的功能类似于下面出现在多个文件中的功能。我想使用正则表达式去除对outputString的所有引用,因为很明显,它们是浪费的。

    ... other functions, class declarations, etc
    public String toString()
      {
        String outputString = "";
        return ... some stuff
         + outputString;
      }
    ... other functions, class declarations, etc

我很高兴在多次传球中这样做。到目前为止,我已经有了正则表达式来查找第一行和最后一行(String outputString = "";$( \+ outputString;)$)。但是,我有两个问题:首先,我想摆脱导致删除引用outputString的两行的空格。其次,我需要在倒数第二行的最后;向上移动到它上面的一行。

作为奖励,我还想知道将行开始锚点(^)添加到我指定的任一正则表达式中有什么问题。似乎这样做会使他们收紧,但当我尝试像^( \+ outputString;)$这样的事情时,我得到零结果。

毕竟说完了,上面的功能应该是这样的:

... other functions, class declarations, etc
public String toString()
  {
     return ... some stuff;
  }
... other functions, class declarations, etc

以下是一些“某些东西”的例子:

"name" + ":" + getName()+ "," +
            "id" + ":" + getId()+ "]" + System.getProperties().getProperty("line.separator") +
            "  " + "student = "+(getStudent()!=null?Integer.toHexString(System.identityHashCode(getStudent())):"null")

这是一个具体的例子:

电流:

public void delete()
          {
            Student existingStudent = student;
            student = null;
            if (existingStudent != null)
            {
              existingStudent.delete();
            }
          }


          public String toString()
          {
            String outputString = "";
            return super.toString() + "["+
                    "name" + ":" + getName()+ "," +
                    "id" + ":" + getId()+ "]" + System.getProperties().getProperty("line.separator") +
                    "  " + "student = "+(getStudent()!=null?Integer.toHexString(System.identityHashCode(getStudent())):"null")
             + outputString;
          }

public String getId()
      {
        return id;
      }    

必需:

public void delete()
      {
        Student existingStudent = student;
        student = null;
        if (existingStudent != null)
        {
          existingStudent.delete();
        }
      }


      public String toString()
      {
        return super.toString() + "["+
                "name" + ":" + getName()+ "," +
                "id" + ":" + getId()+ "]" + System.getProperties().getProperty("line.separator") +
                "  " + "student = "+(getStudent()!=null?Integer.toHexString(System.identityHashCode(getStudent())):"null");
      }

public String getId()
      {
        return id;
      }

2 个答案:

答案 0 :(得分:1)

  

第一遍:

查找

.*outputString.*\R

替换为空字符串。

演示:

https://regex101.com/r/g3aYnp/2

  

第二遍:

查找

(toString\(\)[\s\S]+\))(\s*\R\s*?\})

替换:

$1;$2

https://regex101.com/r/oxsNRW/3

答案 1 :(得分:1)

假设return表达式的所需部分不包含任何半冒号(即;),那么您可以在一次替换中执行此操作。搜索:

^ +String outputString = "";\R( +return [^;]+?)\R +\+ outputString;

并替换为:

\1;

我们的想法是一次性匹配所有三行,以保留想要的部分并添加;

这个替代品中有趣的一点。我的第一次尝试有... return [^;]+)\R +\+ ...,但失败而... return [^;]+)\r\n +\+ ...有效。 \R版本似乎在最终;之前留下了换行符。打开menu => 查看 => 显示符号 => 显示行结束表明,捕获组中的贪婪术语收集了\r\R仅匹配\n。更改为非贪婪表单允许\R与整个\r\n匹配。