. : : ClassiClub ForuM : : .

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

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



发表新主题 回复
 
主题工具
river01
 
river01 的头像
核心会员
 
资 料:
注册日期: Dec 2002
帖子: 2,521 声望值: 3
精华: 0,解答: 4
#1 旧 2013-09-29, 12:11:09 默认 【求助】正则表达式学习求助(已解答谢谢各位老师)
river01 当前离线  

正则还没入门,想从实际问题出发来理解,请有空的帮助解答,如不特别指明编辑软件为EM。
1.在支持正则的编辑软件里,如何把“第29章”内的所有全角数字替换为半角数字,数字位数不定。
2楼答案:\H转换半角,仅有EM有这种扩展转义,写法类似于\H(字符),也就是
第([0123456789]+)章 TO 第\H\1章

2.如何把“上下五千年1”变为“上下五千年第1章” 数字是变化的
6楼答案:上下五千年(\d+) TO 上下五千年第\1章

3 .如何把 两个空行 变为 一个空行?\n与\r有什么区别?
6楼7楼答案:\n\n\n TO \n\n

4、如果要把特征首和尾之间的任何内容删除,内容可能跨行,怎么处理
答案:首.*尾 非贪婪模式 [\s\S]+?
EM默认不允许.跨行,在专业版有个自定义选项可以设置,同时要指定最大跨行

5.如何将匹配的第一处位置标记为1,第n处标记为n。如所有找到的"青年组"按匹配顺序替换为"青年1组""青年2组"。
这个看来超出了正则的范围,应该是正则匹配以后编辑器的事


6、如何将含有 第xx章 的行同时全部选中,或者提取复制到粘贴板。

23楼答案参照此贴 https://bbs.et8.net/bbs/showthread.php?t=864152
(?<=^|(第.+[章集])).*?(?=$|(第.+[章集]))

7、既然\s\S都不包括换行符那为什么[\s\S]*能跨行处理?
我是被网上有些教程误导了,实际上\S包括换行符。[\s\S]*?可以跨行处理

8、对于.*我还是有疑问,它会不会把后面的第字也匹配了?规则是什么,匹配到第字就终止.的匹配吗?
 单纯搜索.*会匹配至换行符前,“.*第”会终止于后面的第,不会把第作为.*的一部分,除非贪婪模式下有多个第。
EM有个开关可以设置.包括不包括换行符
9、正则表达式:(?<=^|(第.+[章集])).*?(?=$|(第.+[章集]))
这个我在EM里运行出错,但语法能理解。如果想在[章集]后面加上"空格4个汉字"的章节名字,如何表示4个汉字?
如果仅仅需要中文可以用[一-龥]包括简繁体

此帖于 2013-10-09 20:01:34 被 river01 编辑. .
回复时引用此帖
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,394 声望值: 5
精华: 0,解答: 129
#2 旧 2013-09-29, 14:31:36 默认
MacOS 当前离线  

\H转换半角,仅有EM有这种扩展转义,写法类似于\H(字符),也就是
第([0123456789]+)章
TO
第\H\1章


HIDDEN MESSAGE LEVEL 3
14863 159357 789 159357 3245687 3684
回复时引用此帖
judite
 
judite 的头像
热心会员
 
资 料:
注册日期: Jan 2001
帖子: 2,508 声望值: 8
精华: 2,解答: 30
#3 旧 2013-09-29, 15:43:30 默认
judite 当前离线  

正则不是用来做这种事滴
还是写程序解决罢
全角有编码问题,gb、utf-8、utf-16……你没法控制
回复时引用此帖
shengweiice
 
shengweiice 的头像
超级会员
 
资 料:
注册日期: Jul 2013
帖子: 1,137 声望值: 4
精华: 0,解答: 1
#4 旧 2013-09-29, 18:01:45 默认
shengweiice 当前离线  

不太容易啊,没有必要用正则表达式,转化成16进制的,看看是多少,全部对应替换成数字就得了


呵呵
回复时引用此帖
river01
 
river01 的头像
核心会员
 
资 料:
注册日期: Dec 2002
帖子: 2,521 声望值: 3
精华: 0,解答: 4
#5 旧 2013-09-30, 08:10:59 默认
river01 当前离线  

2.如何把“上下五千年1”变为“上下五千年第1章” 数字是变化的

3 .如何把 两个空行 变为 一个空行?\n与\r有什么区别?

此帖于 2013-09-30 08:24:48 被 river01 编辑. .
回复时引用此帖
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,394 声望值: 5
精华: 0,解答: 129
#6 旧 2013-09-30, 08:48:05 默认
MacOS 当前离线  

上下五千年(\d+)
TO
上下五千年第\1章
\n\n
TO
\n
\n是UNIX用的换行符,\r是MACINTOSH的,WINDOWS是两种连用,不少WINDOWS编辑器的正则中忽略\r
回复时引用此帖
tomscat
 
tomscat 的头像
中级会员
 
资 料:
注册日期: Sep 2001
帖子: 494 声望值: 3
精华: 0,解答: 5
#7 旧 2013-09-30, 09:05:00 默认
tomscat 当前离线  

两空行变一空行,应该是把3个连续的回车换行替换2个
回复时引用此帖
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,394 声望值: 5
精华: 0,解答: 129
#8 旧 2013-09-30, 09:23:29 默认
MacOS 当前离线  

引用:
作者: tomscat 查看帖子
两空行变一空行,应该是把3个连续的回车换行替换2个
对,是俺的错了
回复时引用此帖
river01
 
river01 的头像
核心会员
 
资 料:
注册日期: Dec 2002
帖子: 2,521 声望值: 3
精华: 0,解答: 4
#9 旧 2013-09-30, 12:25:27 默认
river01 当前离线  

谢谢热心解答,可我在to第\1章后不起作用,是文本编辑器差异吗.
我用MadEdit不起作用,用txtFormat后多了一个换行,只有em可以达到效果。

此帖于 2013-09-30 13:11:47 被 river01 编辑. .
回复时引用此帖
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,394 声望值: 5
精华: 0,解答: 129
#10 旧 2013-09-30, 13:09:01 默认
MacOS 当前离线  

如果没特意说,一般是EM的规则,双字节处理只有EM
回复时引用此帖
river01
 
river01 的头像
核心会员
 
资 料:
注册日期: Dec 2002
帖子: 2,521 声望值: 3
精华: 0,解答: 4
#11 旧 2013-09-30, 23:09:57 默认
river01 当前离线  

4、如果要把特征首和尾之间的任何内容删除,内容可能跨行,怎么处理
如:首
工要困——。,
时是要跺……,
回复时引用此帖
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,394 声望值: 5
精华: 0,解答: 129
#12 旧 2013-10-01, 00:41:15 默认
MacOS 当前离线  

首.*尾
EM默认不允许.跨行,在专业版有个自定义选项可以设置,同时要指定最大跨行
回复时引用此帖
river01
 
river01 的头像
核心会员
 
资 料:
注册日期: Dec 2002
帖子: 2,521 声望值: 3
精华: 0,解答: 4
#13 旧 2013-10-01, 15:08:11 默认
river01 当前离线  

5.如何将匹配的第一处位置标记为1,第n处标记为n。如所有找到的"青年组"按匹配顺序替换为"青年1组""青年2组"。这个比较有用
回复时引用此帖
river01
 
river01 的头像
核心会员
 
资 料:
注册日期: Dec 2002
帖子: 2,521 声望值: 3
精华: 0,解答: 4
#14 旧 2013-10-01, 15:14:49 默认
river01 当前离线  

6、如何将含有 第xx章 的行同时全部选中,或者提取复制到粘贴板。
回复时引用此帖
nicol
 
nicol 的头像
热心会员
 
资 料:
注册日期: Jun 2001
帖子: 11,683 声望值: 6
精华: 0,解答: 11
#15 旧 2013-10-01, 18:39:11 默认
nicol 当前离线  

引用:
作者: river01 查看帖子
4、如果要把特征首和尾之间的任何内容删除,内容可能跨行,怎么处理
如:首
工要困——。,
时是要跺……,
(首)[\s\S]+?(尾)
然后替换成\1\2,中间的就删掉了

引用:
作者: river01 查看帖子
5.如何将匹配的第一处位置标记为1,第n处标记为n。如所有找到的"青年组"按匹配顺序替换为"青年1组""青年2组"。这个比较有用
这个要看各个编辑器的功能了,正则只能匹配,替换要看编辑器
你这个要求就是把青年组分成(青年)(组),替换的时候\1\2就行,中间插入计数器,我不知道那个编辑器支持这种



引用:
作者: river01 查看帖子
6、如何将含有 第xx章 的行同时全部选中,或者提取复制到粘贴板。
第\d+章[^\n]+
这样就行了吧
如果是汉字数字的话就这样:
第[一二三四五六七八九十]+章[^\n]+


都是用regexbuddy测试的,不知道其他软件行不行

此帖于 2013-10-01 18:45:07 被 nicol 编辑. .
回复时引用此帖
发表新主题 回复

主题工具

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


所有时间均为北京时间, 现在的时间是 05:36:45.

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

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