精品技术论坛

精品技术论坛 (https://bbs.et8.net/bbs/index.php)
-   『软件使用』 (https://bbs.et8.net/bbs/forumdisplay.php?f=17)
-   -   【求助】正则表达式写法 (https://bbs.et8.net/bbs/showthread.php?t=1371954)

netsonic 2019-06-28 20:57:46

【求助】正则表达式写法
 
1 个附件
问题1:
每行行首都是下列形式数字章节号开头
1.1
1.1.1
1.1.2
1.2
1.2.1
1.2.2
1.3
以上章节号每个占据一行,章节号后面均有一个空格字符,然后是数量不定的英文或中文字符或数字,最后两个字符是tab空格和位数不限的数字。

章节号里有1个小数点的,行首加1个tab空格;2个小数点的,行首加2个tab空格,以此类推。

问题2:
每行行首大多数是以问题1的数字开头,但有部分是以英文或汉字开头,怎么吧以英文或汉字开始的行合并到上一行去?

gongxiang 2019-06-28 21:00:58

看着这描述真累,还不如直接上文章

netsonic 2019-06-28 21:13:00

引用:

作者: gongxiang (文章 17376791)
看着这描述真累,还不如直接上文章

在一楼附件里。

gongxiang 2019-06-28 21:23:24

正确的写法不是项目符号么
通过格式来控制

MacOS 2019-06-28 23:30:43

2比较好做,不太严格的话,这样应该能处理,但数字头不识别
代码:

^((\d+\.)*\d+ .*)\n([\D\S])
\1\3

1一时间想不出什么好的方法,要么是笨办法,列举条件,另外就是这种有点暴力的做法
第一步,把所有符合的章节头全加远超需求的制表符
代码:

^((\d+\.)*\d+ )
\t\t\t\t\t\t\t\t\t\t\1

第二步,把\t……\d\.当成一种递归,识别出正确的数目,多余的\t不保留
代码:

^\t+((\t(?2)*\d+\.)\d+ )
\1

需要有支持递归的正则编辑,SUBLIME测试

crazytang 2019-06-29 11:51:26

没有简洁的方式,除非你写程序来判断,所以只能一批批来处理

问题1:
^(\d+\.\d+\s+.+)$ => \t$1
^(\d+\.\d+\.\d+\s+.+)$ => \t\t$1
^(\d+\.\d+\.\d+\.\d+\s+.+)$ => \t\t\t$1

问题2:
先将第二行是非数字的分行符去掉,然后用问题1的方式来替换
\n(\D.+)$ => $1 //

netsonic 2019-06-29 21:06:47

感谢楼上两位,但第二个问题两位的代码都不起作用

测试环境:akelpad。

MacOS 2019-06-30 09:08:31

换,软件对正则识别很奇怪,加*却没有贪婪


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

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

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