【问题标题】:How can I make no line space using regex?如何使用正则表达式不创建行空间?
【发布时间】:2013-09-07 12:42:32
【问题描述】:

我的 RichtexBox1 上有以下句子,如果句子以 Create table 开头并以分号结尾,我可以在每行之间只留一个行间距,并且不要留任何行间距

结果:

ALTER TABLE "COURSE" DROP CONSTRAINT "CRSE_CRSE_FK";




ALTER TABLE "ENROLLMENT" DROP CONSTRAINT "ENR_STU_FK";

ALTER TABLE "ENROLLMENT" DROP CONSTRAINT "ENR_SECT_FK"; 

ALTER TABLE "ENROLLMENT" ADD CONSTRAINT "ENR_STU_FK" FOREIGN KEY ("STUDENT_ID") REFERENCES "STUDENT"("STUDENT_ID") ENABLE;

ALTER TABLE "ENROLLMENT" ADD CONSTRAINT "ENR_SECT_FK" FOREIGN KEY ("SECTION_ID") REFERENCES "SECTION"("SECTION_ID") ENABLE;


CREATE TABLE "COMP1" 
(   "EMPID" NUMBER, 
"EMPLNAME" VARCHAR2(20), 
"EMPFNAME" VARCHAR2(20), 
"DEPTNO" NUMBER, 
"MGRID" NUMBER, 
PRIMARY KEY ("EMPID") ENABLE
);

CREATE TABLE "COMP12" 
(   "EMPID" NUMBER, 
"EMPLNAME" VARCHAR2(20), 
"EMPFNAME" VARCHAR2(20), 
"DEPTNO" NUMBER, 
"MGRID" NUMBER, 
PRIMARY KEY ("EMPID") ENABLE
);

预期结果

    ALTER TABLE "COURSE" DROP CONSTRAINT "CRSE_CRSE_FK";  

    ALTER TABLE "ENROLLMENT" DROP CONSTRAINT "ENR_STU_FK";

    ALTER TABLE "ENROLLMENT" DROP CONSTRAINT "ENR_SECT_FK"; 

    ALTER TABLE "ENROLLMENT" ADD CONSTRAINT "ENR_STU_FK" FOREIGN KEY ("STUDENT_ID") REFERENCES "STUDENT"("STUDENT_ID") ENABLE;

    ALTER TABLE "ENROLLMENT" ADD CONSTRAINT "ENR_SECT_FK" FOREIGN KEY ("SECTION_ID") REFERENCES "SECTION"("SECTION_ID") ENABLE;        

    CREATE TABLE "COMP1" 
    (   "EMPID" NUMBER, 
    "EMPLNAME" VARCHAR2(20), 
    "EMPFNAME" VARCHAR2(20), 
    "DEPTNO" NUMBER, 
    "MGRID" NUMBER, 
    PRIMARY KEY ("EMPID") ENABLE
    );

    CREATE TABLE "COMP12" 
    (   "EMPID" NUMBER, 
    "EMPLNAME" VARCHAR2(20), 
    "EMPFNAME" VARCHAR2(20), 
    "DEPTNO" NUMBER, 
    "MGRID" NUMBER, 
    PRIMARY KEY ("EMPID") ENABLE
    );

我的代码(仅添加 2 行空白)

           List<string> rt = new List<string>();
            foreach (string line in richtexBox1 .Lines)
            {
                if (line != "")
                {
                    rt.Add(line);
                    rt.Add("");
                }
            }
            richtexBox1 .Lines = rt.ToArray();

【问题讨论】:

  • 到目前为止你尝试过什么?
  • rt.Add(""); - 你为每个“真实”行添加一个空行,然后想知道为什么会有额外的空行?! o_O - 在你的foreach 中试试这个:rt.Add(line); if (line.Trim().EndsWith(";")) { rt.Add(""); }。因为正如你所说,如果前一个“以分号结尾”,你只需要一个空行。
  • 我看不懂你的代码?您从 rtb (foreach (string line in richTextBox1 .Lines)) 中取出每一行,然后将它们添加到带有空行 (rt.Add("")) 的列表 (rt.Add(line)) 中,然后将它们放回 rtb (richTextBox1 .Lines = rt.ToArray()) 中?这是故意的吗?
  • 有一些空格要删除,并在每个分号后留出 2 个行空格!!!
  • 我添加了我的问题。谢谢

标签: c# regex winforms richtextbox


【解决方案1】:

试试这个

 private void button1_Click(object sender, EventArgs e)
    {
        List<string> rt = new List<string>();
        foreach (string line in richTextBox1.Lines)
        {
            if (!string.IsNullOrEmpty(line.Trim()))
            {
                rt.Add(line);
            }
            if (line.Trim().EndsWith(";"))
            {
                rt.Add("\n");
            }
        }
        richTextBox1.Lines = rt.ToArray();
        richTextBox1.Refresh();
    }

【讨论】:

  • 这似乎在每个“;”之间添加了 2 个新行
  • 唯一的改进是将 List 替换为数组,以防止之后必须将其转换为数组。
【解决方案2】:

感谢您解决问题:

while (richTextBox1.Text.Contains("\n\n"))
    richTextBox1.Text = richTextBox1.Text.Replace("\n\n", "\n");
string[] linesafter = richTextBox1.Lines;
for (int i = 0; i < richTextBox1.Lines.Length; i++)
    if (richTextBox1.Lines[i].EndsWith(";"))
        linesafter[i] = linesafter[i] + "\n";
richTextBox1.Lines = linesafter;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2021-08-22
    相关资源
    最近更新 更多