ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 7364|回复: 10

[分享]OCR后的文本每行后的回车符清除一法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-10-19 00:59 | 显示全部楼层 |阅读模式

如果一篇文档是从OCR获得的,有时每行后都有一个回车的现象,即每行右侧不是自动换行的,纵看象“狗牙齿”似的不齐。

或试本法解决一下,不过本法有局限性,如文本中夹杂其他的字母或数字之类的,会产生误判,最后可能要点儿人工干预,也许哪位同学可以指出有更好的更快的办法

钩选通配符的情况下   查找

<([0-9一-﨩,。 ]{25,39})^13

替换成

\1

注中括号内的范围可根据实际来增删,如有a-zA-Z等,注意全半角,而大括号内的意思是那些多余的回车符所在的字列范围(光标放在任意地方,状态栏就是字列位置提示,可惜本法容易受半角字数量影响,可以换成全角吧)

67CZzblN.rar (15.6 KB, 下载次数: 33)

TA的精华主题

TA的得分主题

发表于 2006-10-19 06:21 | 显示全部楼层

一、我的文档中绝对有数字,以前我都用手工处理,没有想到更好的办法,是否该用宏来处理?控制每行的字数?

二、新问题:我从OA系统下载的文档,能导出,但导出后变成为文本,这个文本特点是:只有一段!如何还原到原来的格式,即有很多段落,有些段落还有一、二、(一)、(二)、1、2、(1)、(2)、A、B....之类的东西,有些段落的起始点也没有什么特征,就是两段文字,文中肯定有数字。

我一直是手工处理,是否有好办法?

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-19 09:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-10-19 09:54 | 显示全部楼层

以回车符的列位置来判断可能会有误判,例如,假设段落以句号结束,而该段落的最后一行恰好占该行的一半以上的位置,则该行句号后的回车符很可能被删除而使其与下一段落合并为一段落。 

我也一直关注这方面的问题,只是还没找到高效的常规办法。我平时的基本做法是:

查找:([!。?!])^13

替换:\1

 因根据汉语标点符号的用法规则,句末点号有三种,即句号、问号和感叹号。但有几点应注意:
1.上述方法只针对汉字标点符号,还不包括英文标点的点号、问号和感叹号;如有必要可添加进去(注意与通配符区别开来);
2.有时除上述3个句末点号外,也有以冒号、破折号等作为段落结尾的情形,上述方法不包括在内;
3.作为标题、题注的段落,或者某些列表式的段落,其结尾一般不用标点符号,对此应作特殊处理。一般是先处理这些特殊段落,并对这些特殊段落设定不同样式以便在删除回车符时将其排除在外。
当然,我的替换方法也会有错判和漏判。
--又出现无法正常编辑的怪现象,郁闷。

 因根据汉语标点符号的用法规则,句末点号有三种,即句号、问号和感叹号。但有几点应注意:
1.上述方法只针对汉字标点符号,还不包括英文标点的点号、问号和感叹号;如有必要可添加进去(注意与通配符区别开来);
2.有时除上述3个句末点号外,也有以冒号、破折号等作为段落结尾的情形,上述方法不包括在内;
3.作为标题、题注的段落,或者某些列表式的段落,其结尾一般不用标点符号,对此应作特殊处理。一般是先处理这些特殊段落,并对这些特殊段落设定不同样式以便在删除回车符时将其排除在外。
当然,我的替换方法也会有错判和漏判。
--又出现无法正常编辑的怪现象,郁闷。

[此贴子已经被作者于2006-10-19 9:59:11编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-10-19 12:29 | 显示全部楼层

谢谢楼上的办法,应该说比我的方法好些,误判断要少些。

我知道我的方法有局限性,上面有的已经说明,我以前用纵选法,也有局限性,这真是一个难题呀,不过一般情况下用足够了,只要加少量的工具干预。

TA的精华主题

TA的得分主题

发表于 2020-4-11 13:46 | 显示全部楼层
请叫红色部分的回车符如何清除

红色部分.rar

19.7 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2020-4-11 14:52 | 显示全部楼层
zzpsx 发表于 2020-4-11 13:46
请叫红色部分的回车符如何清除

Sub 断行相连新2()
    ActiveDocument.Content.Find.Execute FindText:="([!。:;.!?…)])^13", MatchWildcards:=True, ReplaceWith:="\1", Replace:=wdReplaceAll
End Sub


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-4-11 16:15 | 显示全部楼层
cuanju 发表于 2020-4-11 14:52
Sub 断行相连新2()
    ActiveDocument.Content.Find.Execute FindText:="([!。:;.!?…)])^13", Ma ...

如果只对选中部分执行代码就更好了

TA的精华主题

TA的得分主题

发表于 2020-4-19 10:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub 断行相连新3()
    ActiveDocument.Content.Find.Execute FindText:="^13{2,}", MatchWildcards:=True, ReplaceWith:="^p", Replace:=wdReplaceAll ‘删除空段
    ActiveDocument.Content.Find.Execute FindText:="([!。:;.!?…)])^13([!(0-9一二三四五六七八九十])", MatchWildcards:=True, ReplaceWith:="\1\2", Replace:=wdReplaceAll '将断行相连但防止标题行也误相连
End Sub

TA的精华主题

TA的得分主题

发表于 2020-4-25 21:36 | 显示全部楼层
本帖最后由 yian123 于 2020-4-26 15:03 编辑

Sub 断行相连1()
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "([!。:;.!?…)])^13([!(0-9一二三四五六七八九十])"
        .Replacement.Text = "\1\2"
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
   
End Sub
楼上的表达式是我在word群补充的。,但是我没法正则表达出完整的意思
这个支持选择的范围替换。然后这两天学的word vba又写了代码,这个更完整。word群232492730
Sub 断行相连()
Dim a, i As Integer
arr1 = Array("一、", "二、", "三、", "四、", "五、", "六、", "七、", "八、", "九、", "十、")
arr2 = Array("。", ":", ":", ";", "!", "!", ";", "?", "?", "…")
With Selection
a = .Paragraphs.Count
For i = a To 1 Step -1
    If InStr(1, Join(arr1), Left(.Paragraphs(i), 2)) Or InStr(1, Join(arr2), Replace(Right(.Paragraphs(i), 2), Chr(13), "")) Then
    Else
    .Paragraphs(i).Range.Find.Execute FindText:="^13", MatchWildcards:=True, ReplaceWith:="", Replace:=wdReplaceAll
    End If
Next
End With
End Sub

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 11:34 , Processed in 0.055345 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表