精品技术论坛

精品技术论坛 (https://bbs.et8.net/bbs/index.php)
-   『软件使用』 (https://bbs.et8.net/bbs/forumdisplay.php?f=17)
-   -   【求助】正则表达式学习求助(已解答谢谢各位老师) (https://bbs.et8.net/bbs/showthread.php?t=1043892)

river01 2013-09-29 12:11:09

【求助】正则表达式学习求助(已解答谢谢各位老师)
 
正则还没入门,想从实际问题出发来理解,请有空的帮助解答,如不特别指明编辑软件为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个汉字?
如果仅仅需要中文可以用[一-龥]包括简繁体

MacOS 2013-09-29 14:31:36

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

judite 2013-09-29 15:43:30

正则不是用来做这种事滴
还是写程序解决罢
全角有编码问题,gb、utf-8、utf-16……你没法控制

shengweiice 2013-09-29 18:01:45

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

river01 2013-09-30 08:10:59

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

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

MacOS 2013-09-30 08:48:05

上下五千年(\d+)
TO
上下五千年第\1章
\n\n
TO
\n
\n是UNIX用的换行符,\r是MACINTOSH的,WINDOWS是两种连用,不少WINDOWS编辑器的正则中忽略\r

tomscat 2013-09-30 09:05:00

两空行变一空行,应该是把3个连续的回车换行替换2个

MacOS 2013-09-30 09:23:29

引用:

作者: tomscat (文章 11128786)
两空行变一空行,应该是把3个连续的回车换行替换2个

对,是俺的错了

river01 2013-09-30 12:25:27

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

MacOS 2013-09-30 13:09:01

如果没特意说,一般是EM的规则,双字节处理只有EM

river01 2013-09-30 23:09:57

4、如果要把特征首和尾之间的任何内容删除,内容可能跨行,怎么处理
如:首
工要困——。,
时是要跺……,

MacOS 2013-10-01 00:41:15

首.*尾
EM默认不允许.跨行,在专业版有个自定义选项可以设置,同时要指定最大跨行

river01 2013-10-01 15:08:11

5.如何将匹配的第一处位置标记为1,第n处标记为n。如所有找到的"青年组"按匹配顺序替换为"青年1组""青年2组"。这个比较有用

river01 2013-10-01 15:14:49

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

nicol 2013-10-01 18:39:11

引用:

作者: river01 (文章 11129027)
4、如果要把特征首和尾之间的任何内容删除,内容可能跨行,怎么处理
如:首
工要困——。,
时是要跺……,

(首)[\s\S]+?(尾)
然后替换成\1\2,中间的就删掉了

引用:

作者: river01 (文章 11129128)
5.如何将匹配的第一处位置标记为1,第n处标记为n。如所有找到的"青年组"按匹配顺序替换为"青年1组""青年2组"。这个比较有用

这个要看各个编辑器的功能了,正则只能匹配,替换要看编辑器
你这个要求就是把青年组分成(青年)(组),替换的时候\1\2就行,中间插入计数器,我不知道那个编辑器支持这种



引用:

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

第\d+章[^\n]+
这样就行了吧
如果是汉字数字的话就这样:
第[一二三四五六七八九十]+章[^\n]+


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


所有时间均为北京时间, 现在的时间是 21:13:16.

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

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