二、实现思路:

注意到代码注释的文本的特点是开头为“//”,考虑到可以使用通配符来进行文本描述从而实现替换。

而空行的特点是由连续的两个换行符组成,可以通过将连续的两个换行符替换为单个换行符实现空行的删除。

三、实现步骤:

1、删除注释:

(1)使用ctrl+a快捷键全选内容,然后通过ctrl+h快捷键弹出替换设置界面:

(2)点击“更多”,勾选使用“通配符”

(3)在查找内容中输入://*^13

在替换为中输入:^13

(4)点击“全部替换”(最好多点击几次),即可发现,所有的注释行都变为了空行,如下图:、

(5)若是region形式的注释,可参考:
(  #region*^13)  替换成  ^13
(  #endregion^13)  替换成  ^13

2、删除空行:

需要分两步进行,前段部分操作与删除注释相同,全选并弹出替换窗口,勾选使用通配符,使用以下两步替换:

(1)^13[ ]@^13 替换成  ^13^13
(2)^13^13  替换成  ^13

每一步要多点击几次“全部替换”,即可实现空行的删除,如下图:

一、需求:        现从编程软件中粘贴了一堆代码至word文档中,内容有百页之多,如下图:        现在想要对代码内容进行缩减,需要进行以下操作:    (1)删掉注释。    (2)删除空行。二、实现思路:       注意到代码注释的文本的特点是开头为“//”,考虑到可以使用通配符来进行文本描述从而实现替换。       而空行的特点是由连续的两个换...
利用宏 代码 快速 删除 Word 文档中的这些 空行 。按下“Alt+F11”组合键打开Microsoft Visual Basic编辑器窗口,依次执行“插入→模块”,在右侧窗格中插入一个空白模块,手工输入如下 代码 : Sub 删除 表格 空行 ()Dim aTable As Table, aRow As RowApplication.ScreenUpdating = FalseFor Each aTable In...
需求说明:好多软件配置文件中会有许多以#开头的 注释 说明内容和 空行 ,需求是在查看文件的时候不显示这些内容。1:使用cat方式命令格式:cat文件路径|grep-v"^#"|grep-v"^$" 举例:cat/etc/ssh/sshd_config|grep-v"^#"|grep-v"^$"2.使用sed方式命令格式:sed-e'/^#...
<br /> <br />1. 注释 使用的是以 //开始,所以我先把//替换成AAAA或别的什么字符<br />2.现在 删除 以AAAA开头的所有行:<br /><br /> 使用UltraEdit 的regular expression替换选项,<br />查找%[ ^t]++AAA*^r 把它替换为空, 这个替换法在 注释 行前面可以有空格或制表符<br /><br /> 如果用这个%AAA*^P 注释 行前面不能有空格。在UltraEdit的help里,%的正则表达式意思为行的开始<br /> <br
一、首先下一个支持正则表达式的编辑器,如notepad++ 二、用编辑器打开程序,按Ctrl + F,查找替换,选中下图的红框中的Regular expression,在Findwhat中输入正则表达式,然后点击ReplaceAll即可。 三、正则表达式:1、/\*(.|[\r\n])*?\*/ 2、\/\/[^\n]* 3、^[\s]*\n 注释 :1、这个是查找/*与*/这样的 注释 的,全部替换为空; 2、这个是查找//这样的 注释 ,全部替换为...
emeditor 破解版以运行轻巧、敏捷而又功能强大、丰富著称,作为简单好用的 文本 编辑器,EmEditor 支持多种配置,可自定义颜色、字体、工具栏、快捷键、行距等,支持 文本 列块选择、无限撤消/重做等,是替代记事本的最佳编辑器。 我最近一直在用 EmEditor,其便携性很适合影子系统,标签窗口也是极方便操作,现提供 EmEditor 12.0.4官方简体中文便携版,分别为 EmEditor 32 位和 64 位版。EmEditor 现已经添加了官方简体中文和繁体中文支持,无需额外汉化。 使用说明: 解压后直接运行主程序 EmEditor.exe 即可,所有配置都保存在 ini 文件中,纯绿色便携,完全兼容 Windows 7 及 PortableapPS.com 的便携平台,如果无法显示简体中文,可能需要重新配置。 2013/3/16 更新版本为 EmEditor 12.0.11 官方简体中文便携版,分别为 EmEditor 32 位和 64 位版。EmEditor 现已经添加了官方简体中文和繁体中文支持,无需额外汉化。 emeditor 破解版配置教程: 下面就让我们一起来通过图形化界面配置适合自己的EmEditor编辑器。 1、众多的图形界面配置功能 通过查看EmEditor的安装目录,可以发现,EmEditor有几个配置文件,理论上应该可以通过修改配置文件来达到配置EmEditor的目 的。然而,打开配置文件一看,如果您用过Vim,配置过Vim的话,会发现EmEditor的配置文件没法看。既然这样,那我们自然就会使用图形画界面来 配置了。 启动EmEditor,点击菜单栏上的工具菜单,该菜单下的几个子菜单就是配置用的。先来预览一下自定义和配置对话框。 通过配置对话框上的标签,您应该大概知道EmEditor的配置项有多少了吧,也应该相信EmEditor是很强大的,而且可以很有“个性”。 首先,来自定义EmEditor,相当于定义一个编辑环境。 2、自定义对话框 在自定义对话框中,很多定义采用默认即可。在此大概说一些polaris修改的几个地方。 1)在文件选项卡选中记住最后打开的文件夹。这样一定程度上方便了后续操作。 2)历史选项卡中可以记录最近打开文件记录,同时记录最近使用的字体。这样,在换字体时,只需要执行:查看菜单,就会有几个最近使用的字体。 3)查看:可以配置其他分栏的外观,如:资源管理器、大纲、输出窗口等;另外可以配置光标大小和颜色。 4)窗口:当时学Vim的时候,有一个很好的功能:保存当前工作环境,以便下次可以继续当前的工作。窗口就是用于配置这样类似的功能,不过似乎只能保存一个工作环境,没有Vim那么强大。 5)鼠标:配置鼠标按键执行的操作(主要是鼠标中建)。 6)状态栏:建议将所有选项勾选,在状态栏可以看到很多东西。 7)快捷方式:有一个很强大的功能,就是选中“在任务栏显示托盘符”,这样在任务栏可以方便的进行各种操作(通过自定义托盘图标)。 其他的选项您可以自己尝试。 3、打造共性 前面已经知道,EmEditor有一个“所有配置属性”。对,它是用于配置所有文件格式共同的属性。下面介绍常用配置。 3.1 常规选项卡 这是EmEditor最基本的一些配置。在这个选项卡中,一般建议勾选上显示标尺与行号,这是因为人们都习惯了编程(或阅读 代码 )时看到行号,这会 很方便定位,当然如果你不是程序员,可以不勾选。注意,这里勾选上,即使有些文件类型不想显示也没关系,别忘了EmEditor有“个性”化功能。 在这个选项卡有一个重要的配置项,那就是“制表符/缩进”,该对话框如下: 这里建议勾选上自动缩进和使用正则表达式,正则表达式的作用主要是为了编程缩进,以后再涉及。然后就是制表符大小和缩进大小,一般都会设置成4。 3.2 滚动选项卡 这里主要用于设置屏幕移动,根据你的习惯或爱好配置即可。有两个地方提一下: 1)“总是启用一页垂直滚动”。在使用编辑器的过程中,您肯定遇到过这种情况:编辑到了文件末尾,看着不方便,然后你就会按很多次回车来产生很多空 行,以使编辑行在中间。EmEditor提供了很好的解决方案,只需要勾选上“总是启用一页垂直滚动”,EmEditor便一直有一空页,让你的编辑总是 在上面或中间,而且没有产生多余的 空行 。 2)“水平格线”。选中后看起来像这样: 如果您喜欢可以勾选上。 3.3 文件选项卡 主要配置文件新建、编辑、保存时得一些信息,涉及文件编码等。一般采用默认即可。 3.4 备份、自动保存和关联选项卡 从标签名很容易知道功能。polaris备份功能一般不用(不喜欢它产生临时文件。呵呵。不过似乎不备 function IsUpper(ch: char): boolean; function IsLower(ch: char): boolean; function ToUpper(ch: char): char; function ToLower(ch: char): char; public procedure ReplaceSelText(Edit: TCustomEdit; const s: String); procedure UpperSelText(Edit: TCustomEdit); procedure LowerSelText(Edit: TCustomEdit); function UpperFistLetter(Memo: TMemo): string; procedure ClearBlankLine(Memo: TMemo); procedure ClearBlankSpace(Memo: TMemo); procedure ClearNum(Memo: TMemo); procedure ClearLetter(Memo: TMemo); procedure InsertNumber(Memo: TMemo); procedure InsertComment(Memo: TMemo); procedure BatchReplaceString(Memo: TMemo); procedure JustOneLine(Memo: TMemo); procedure ReLine(Memo: TMemo; n: Integer); procedure TextToHtml(sTextFile, sHtmlFile: string); function Proper(const s: string): string; function CN Word sCount(text: string): Integer; function EN Word sCount(text: string): Integer; StrFunction: TStringFunction; implementation // 让 代码 设置Memo后可以让memo在Ctrl+Z撤销有效 procedure TStringFunction.ReplaceSelText(Edit: TCustomEdit; const s: String); begin SendMessage(Edit.Handle, EM_REPLACESEL, 1, LPARAM(PChar(s))); // Edit.Perform(EM_REPLACESEL, 1, LPARAM(PChar(s))); // Edit显示行号 // ------------------------------------------------------------------------------ // 去除 空行 // Memo1.Text := StringReplace(Memo1.Text, #13#10#13#10, #13#10, [rfReplaceAll]); //无法撤销 // 空行 的去掉 //本行只有空格的也去掉 //复制到剪切板上 procedure TStringFunction.ClearBlankLine(Memo: TMemo); i: Integer; list: TStringList; begin with Memo do begin if Lines.Count > 0 then begin list := TStringList.Create; for i := 0 to Lines.Count - 1 do if (Trim(Lines[i]) <> '') then list.Add(Lines[i]); SelectAll; ReplaceSelText(Memo, list.text); list.Free; // 去除空格 // 将 空格替换为空 procedure TStringFunction.ClearBlankSpace(Memo: TMemo); s: string; begin s := StringReplace(Memo.Lines.text, ' ', '', [rfReplaceAll]); Memo.SelectAll; ReplaceSelText(Memo, s); // 去除一字符串中的所有的数字 procedure TStringFunction.ClearNum(Memo: TMemo); str: string; i: Integer; begin str := '1234567890'; for i := 0 to Length(str) do Memo.text := StringReplace(Memo.Lines.text, str[i], '', [rfReplaceAll]); { rfReplaceAll TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase); // 去除一字符串中的所有的字母 procedure TStringFunction.ClearLetter(Memo: TMemo); str: string; i: Integer; begin str := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; for i := 0 to Length(str) do Memo.text := StringReplace(Memo.Lines.text, str[i], '', [rfReplaceAll]); // 批量替换关键字 procedure TStringFunction.BatchReplaceString(Memo: TMemo); i: Integer; begin for i := 0 to Length(Memo.Lines.text) do Memo.text := StringReplace(Memo.Lines.text, Memo.Lines[i], '', [rfReplaceAll]); ClearBlankSpace(Memo); // ------------------------------------------------------------------------------ // 全角转半角 // 符号有哪些 procedure ConvertQtoB; begin // 半角转换全角 procedure ConvertBtoQ; begin { 转换选中的 文本 大写 } procedure TStringFunction.UpperSelText(Edit: TCustomEdit); x, y: Integer; begin With Edit do begin x := SelStart; y := SelLength; if SelText <> '' then begin ReplaceSelText(Edit, UpperCase(SelText)); SelStart := x; SelLength := y; begin Edit.SelectAll; ReplaceSelText(Edit, UpperCase(Edit.text)); { 转换选中的 文本 小写 } procedure TStringFunction.LowerSelText(Edit: TCustomEdit); x, y: Integer; begin With Edit do begin x := SelStart; y := SelLength; if SelText <> '' then begin ReplaceSelText(Edit, LowerCase(SelText)); SelStart := x; SelLength := y; begin Edit.SelectAll; ReplaceSelText(Edit, LowerCase(Edit.text)); { 判断字符是否是大写字符 } function TStringFunction.IsUpper(ch: char): boolean; begin Result := ch in ['A' .. 'Z']; { 判断字符是否是小写字符 } function TStringFunction.IsLower(ch: char): boolean; begin Result := ch in ['a' .. 'z']; { 转换为大写字符 } function TStringFunction.ToUpper(ch: char): char; begin Result := chr(ord(ch) and $DF); { 转换为小写字符 } function TStringFunction.ToLower(ch: char): char; begin Result := chr(ord(ch) or $20); { Capitalizes First Letter Of Every Word In S 单语首字母大写 } function TStringFunction.Proper(const s: string): string; i: Integer; CapitalizeNextLetter: boolean; begin Result := LowerCase(s); CapitalizeNextLetter := True; for i := 1 to Length(Result) do begin if CapitalizeNextLetter and IsLower(Result[i]) then Result[i] := ToUpper(Result[i]); CapitalizeNextLetter := Result[i] = ' '; { Memo选中的首字母大写 } function TStringFunction.UpperFistLetter(Memo: TMemo): string; i, j: Integer; begin with Memo do begin i := SelStart; j := SelLength; // SelText := Proper(SelText); ReplaceSelText(Memo, Proper(SelText)); SelStart := i; SelLength := j; // ------------------------------------------------------------------------------ procedure TStringFunction.InsertNumber(Memo: TMemo); i: Integer; str: String; begin for i := 0 to Memo.Lines.Count do begin str := Format('%.4d. %s', [i, Memo.Lines[i]]); Memo.Lines[i] := str; Application.ProcessMessages; // 注释 和取消 注释 // 获得选中的 文本 的起始行和结束行 procedure TStringFunction.InsertComment(Memo: TMemo); str: string; x, y: Integer; begin str := Memo.SelText; x := Memo.SelStart; y := Memo.SelLength; if str = '' then Exit; // Memo.SetSelText('//' +str); Memo.SelText := '//' + str; Memo.SelStart := x + 2; Memo.SelLength := y + 2; // ------------------------------------------------------------------------------ // 合并成一行 procedure TStringFunction.JustOneLine(Memo: TMemo); s: string; i: Integer; begin for i := 0 to Memo.Lines.Count - 1 do s := s + Memo.Lines[i]; Memo.SelectAll; ReplaceSelText(Memo, s); // ------------------------------------------------------------------------------ // 重新分行 n: Integer; begin n := StrToInt(InputBox('重新分行', '每行几个字符', '8')); ReLine(Memo1, n); procedure TStringFunction.ReLine(Memo: TMemo; n: Integer); s: string; i, j, k: Integer; L: TStringList; begin L := TStringList.Create; j := 1; for k := 0 to Memo.Lines.Count - 1 do s := s + Memo.Lines[k]; if Trim(s) <> '' then begin for i := 0 to (Length(s) div n) do // 几行 begin j := j + n; L.Add(Copy(s, j - n, n)); // COPY 的第一位不是0是1 // 每行的字符 Memo.SelectAll; ReplaceSelText(Memo, L.text); L.Free; // ------------------------------------------------------------------------------ // 获得汉字字符个数 function TStringFunction.CN Word sCount(text: string): Integer; i, sum, c: Integer; begin Result := 0; c := 0; sum := Length(text); if sum = 0 then Exit; for i := 0 to sum do begin if ord(text[i]) >= 127 then begin Inc(c); Result := c; // 获得非汉字字符个数 function TStringFunction.EN Word sCount(text: string): Integer; i, sum, e: Integer; begin Result := 0; e := 0; sum := Length(text); if sum = 0 then Exit; for i := 0 to sum do begin if (ord(text[i]) >= 33) and (ord(text[i]) <= 126) then begin Inc(e); Result := e; TextToHtml('C:\1.txt','c:\2.htm'); procedure TStringFunction.TextToHtml(sTextFile, sHtmlFile: string); aText: TStringList; aHtml: TStringList; i: Integer; begin aText := TStringList.Create; aText.LoadFromFile(sTextFile); aHtml := TStringList.Create; aHtml.Clear; aHtml.Add('<html>'); aHtml.Add('<body>'); for i := 0 to aText.Count - 1 do aHtml.Add(aText.Strings[i] + '<br>'); aHtml.Add('</body>'); aHtml.Add('</html>'); aHtml.SaveToFile(sHtmlFile); finally aHtml.Free; finally aText.Free; Initialization StrFunction := TStringFunction.Create; Finalization StrFunction.Free; 这个命令会在当前目录下查找所有的.py文件,将它们的内容合并起来,并使用sed命令去除 注释 空行 ,最后使用wc命令统计行数并输出。如果需要在Python中调用这个命令并返回结果,可以使用以下 代码 : ```python import subprocess result = subprocess.check_output(['find', '.', '-name', '*.py', '|', 'xargs', 'cat', '|', 'sed', '/^\\s*#/d;/^\\s*$/d', '|', 'wc', '-l']) print(result.decode('utf-8')) 这个 代码 使用subprocess模块调用命令行,并将结果以字符串形式返回。注意,这个 代码 并没有对命令行的输出进行 处理 ,因此输出结果可能包含一些不必要的空格或换行符。