. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 关闭主题
 
主题工具
netsonic
 
netsonic 的头像
热心会员
 
资 料:
注册日期: Feb 2002
帖子: 13,998 声望值: 5
精华: 1,解答: 20
#1 旧 2012-02-17, 13:47:06 Icon5 【求助】这样的文字替换该怎么做?求正则表达式
netsonic 当前离线  

比如以下的目录内容,是用Acrobat自带的识别文本功能识别的
引用:
章节号 章节标题…................'..... ........... .…......... 25
章节号 章节标题…..................... .......".... .…......... 29
“章节号”前可能有若干空格也可能没有,从“章节标题”到最后页码数字之间有字符,有时是小数点,有时是三个点连在一起的省略号,有时是若干空格,还可能是其他字符,但一定不是数字,字母或汉字。
这个“章节号 章节标题”只是示意的,其具体内容应该是任意数字,字母或汉字的组合,比如“第1章 绪论”,“第一节 背景”,“1.1 概述”。

目标是把“章节号”前的任何空格删除,把“章节标题”和最后页码数字之间的所有字符替换成一个制表符,能想到最好的办法是用正则表达式替换,但不知怎么写。

PS 有没有比正则表达式干好的方法?

此帖于 2012-02-18 14:52:08 被 netsonic 编辑. .


出售 JBL RF610, 支持蓝牙立体声 | iGo蓝牙鼠标
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,195 声望值: 5
精华: 0,解答: 127
#2 旧 2012-02-18, 12:19:59 默认
MacOS 当前离线  

全顺序是很好写的,基本上通配符或正则都可能解决,有反向逻辑的东西就很难用正则实现
\s*(\d+\.\d+\s目录内容).+?(\d+)
\1\t\2
这种不严格

\s*(\d+\.\d+\s目录内容)[\D\W]+?(\d+)
\1\t\2
这种严格


HIDDEN MESSAGE LEVEL 3
14863 159357 789 159357 3245687 3684
netsonic
 
netsonic 的头像
热心会员
 
资 料:
注册日期: Feb 2002
帖子: 13,998 声望值: 5
精华: 1,解答: 20
#3 旧 2012-02-18, 13:13:52 默认
netsonic 当前离线  

引用:
作者: MacOS 查看帖子
全顺序是很好写的,基本上通配符或正则都可能解决,有反向逻辑的东西就很难用正则实现
\s*(\d+\.\d+\s目录内容).+?(\d+)
\1\t\2
这种不严格

\s*(\d+\.\d+\s目录内容)[\D\W]+?(\d+)
\1\t\2
这种严格
多谢解答。

一开始没说清楚,这个“目录内容”只是示意的,其具体内容应该是任意数字,字母或汉字的组合,比如“第1章 绪论”,“第一节 背景”。这种情况下,怎么把“目录内容”部分用正则表达式替代?

另外我想用Ultraedit做正则表达式的替换,Ultraedit有三种正则表达式引擎:Ultraedit,Unix和Perl,这里引用的是哪一种?
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,195 声望值: 5
精华: 0,解答: 127
#4 旧 2012-02-18, 13:29:22 默认
MacOS 当前离线  

有涉及中文都用EM,手机上网不太好写,如果是这样此处应该是[\d\w]+替代
namejm
 
namejm 的头像
超级会员
 
资 料:
注册日期: Apr 2009
帖子: 1,248 声望值: 3
精华: 18,解答: 76
#5 旧 2012-02-18, 14:00:53 默认
namejm 当前离线  

如果紧跟“目录内容”前后的字符是字母、数字、英文字符或空格那就很好办


TotalCommder、EveryThing、batch、AutoHotKey、EverEdit
精通Word、Excel、PPT的安装与卸载
熟练掌握VB、C++、SQL的缩写
netsonic
 
netsonic 的头像
热心会员
 
资 料:
注册日期: Feb 2002
帖子: 13,998 声望值: 5
精华: 1,解答: 20
#6 旧 2012-02-18, 14:51:25 默认
netsonic 当前离线  

引用:
作者: namejm 查看帖子
如果紧跟“目录内容”前后的字符是字母、数字、英文字符或空格那就很好办
这个“目录内容”是章节号和章节内容的组合。“目录内容”前一般是几个空格的组合(也可能没有),后面是一些被Acrobat识别为标点符号的组合(也可能包括空格)。
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,195 声望值: 5
精华: 0,解答: 127
#7 旧 2012-02-19, 11:48:07 默认
MacOS 当前离线  

\s*(.+?)[\D\W]{2,}(\d+)
\1\t\2
不严格的写法,只能匹配两个以上的符号,严格的通用很麻烦,还不如针对章节号规则写
crazytang
 
crazytang 的头像
超级会员
 
资 料:
注册日期: Feb 2001
帖子: 1,730 声望值: 3
精华: 0,解答: 5
#8 旧 2012-02-19, 12:21:16 默认
crazytang 当前离线  

章节号 章节标题…................'..... ........... .…......... 25
\s*([^\s]+\s+[\u4e00-\u9fa5]+).+?(\d+)

\1\t\2

try this
发表新主题 关闭主题

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 03:56:19.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号