查看: 484|回复: 12

[求助] 请教一个关于正则问题,帮忙拓展下思路

[复制链接]

11

听众

0

收听

2

好友

举人

Rank: 6Rank: 6

UID
137120
积分
1130
回帖
239
主题
24
铜币
25659
威望
996
银币
0
贡献
0
发书数
21
注册时间
2021-9-25
最后登录
2024-4-28
在线时间
218 小时
发表于 2024-1-22 18:25 | 显示全部楼层 |阅读模式
做书时想给引号里的对话语句添加样式,(如图1)因此打算在p标签里嵌套span标签





但是发现对话文本(引号中间)有换行,而且新起的一段没有添加引号(如图二)。

像图二这种情况如何一步到位实现图一的嵌套样式呢?特来请教书友们

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

15

听众

0

收听

13

好友

贡士

Rank: 7Rank: 7Rank: 7

UID
155378
积分
2986
回帖
1024
主题
67
铜币
44294
威望
2435
银币
0
贡献
0
发书数
57
注册时间
2023-6-14
最后登录
2024-4-28
在线时间
1537 小时
发表于 2024-1-22 19:14 | 显示全部楼层
这个需要启用正则的单行匹配模式,在 sigil 里面,点击一下这个正则表达式选项,勾选“覆盖全部”试下。


正则表达式写成:“(.*?)”即可。

这个原理就是把 . 通配符的范围扩展到了包括换行符(原来 . 是不包含换行符的),把所有内容都当成了一行来处理。

但是要注意如果开启了这个选项,^ 和 $ 就无法匹配行首行尾了,所以一般是用完之后要把这个选项重新关闭的。

另外,这本书是终宋吧,其实它这种连续对话内容的引号用法是不太规范的,应该是:

“我是第一段话。
“我是第二段话。
“我是最后一段话。”


这种形式才比较规范,不过如果不在意的话也无需理会。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

参与人数 1威望 +2 铜币 +10 收起 理由
baizhai1704 + 2 + 10 论坛有您更精彩!

查看全部评分

回复 支持 反对

使用道具 举报

11

听众

0

收听

2

好友

举人

Rank: 6Rank: 6

UID
137120
积分
1130
回帖
239
主题
24
铜币
25659
威望
996
银币
0
贡献
0
发书数
21
注册时间
2021-9-25
最后登录
2024-4-28
在线时间
218 小时
 楼主| 发表于 2024-1-22 19:27 | 显示全部楼层
edennow 发表于 2024-1-22 19:14
这个需要启用正则的单行匹配模式,在 sigil 里面,点击一下这个正则表达式选项,勾选“覆盖全部”试下。

...

是的《终宋》,他这种写法不规范。
贪婪匹配我是知道的,如何选中这些文本我也知道。那就假设以现阶段不规范的文本作为使用要如何给
比如这句话     <p>据邻里所言,李家父子平日深居浅出,不与人来往。</p>
要让它怎么直接插入span标签呢?我昨晚睡前想了好久没想到怎么实现。
[发帖际遇]: “带上笑容,带上祝愿,陪同爱人,常回家看看。”Venzos 获得奖励 3 铜币. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

15

听众

0

收听

13

好友

贡士

Rank: 7Rank: 7Rank: 7

UID
155378
积分
2986
回帖
1024
主题
67
铜币
44294
威望
2435
银币
0
贡献
0
发书数
57
注册时间
2023-6-14
最后登录
2024-4-28
在线时间
1537 小时
发表于 2024-1-22 19:34 | 显示全部楼层
Venzos 发表于 2024-1-22 19:27
是的《终宋》,他这种写法不规范。
贪婪匹配我是知道的,如何选中这些文本我也知道。那就假设以现阶段不 ...

哦哦是这个意思,那可不可以考虑使用 div 把匹配的内容整个包住呢?
是否有必须要用 span 来做样式的需求?
如果有的话,我倒是可以提供一下比较笨的办法(不过可能不是很合理)
回复 支持 反对

使用道具 举报

36

听众

0

收听

2

好友

翰林

Rank: 9Rank: 9Rank: 9

UID
225
积分
16515
回帖
5138
主题
23
铜币
55771
威望
13934
银币
26
贡献
0
发书数
3
注册时间
2015-5-6
最后登录
2024-4-28
在线时间
3986 小时

年度活动达人

发表于 2024-1-22 19:42 | 显示全部楼层
用sigil吧吧主的epub批量修改器可以实现,先定搜索范围<p>:”</p>(具体正则自己写),再把<p>,</p>替换掉,最后来处理<p>.*:部分的替换。

评分

参与人数 1威望 +2 铜币 +10 收起 理由
baizhai1704 + 2 + 10 论坛有您更精彩!

查看全部评分

回复 支持 反对

使用道具 举报

11

听众

0

收听

2

好友

举人

Rank: 6Rank: 6

UID
137120
积分
1130
回帖
239
主题
24
铜币
25659
威望
996
银币
0
贡献
0
发书数
21
注册时间
2021-9-25
最后登录
2024-4-28
在线时间
218 小时
 楼主| 发表于 2024-1-22 19:42 | 显示全部楼层
edennow 发表于 2024-1-22 19:34
哦哦是这个意思,那可不可以考虑使用 div 把匹配的内容整个包住呢?
是否有必须要用 span 来做样式的需 ...

是的,就是不想要div标签整个包住。
因为里面还有不属于对话的内容,比如  <p>林子道:
林子道:    是想跟随正文的样式,而引号里面的对话内容又是不一样的字体不一样的颜色,所以想看看探究下实现的可能性的。
回复 支持 反对

使用道具 举报

15

听众

0

收听

13

好友

贡士

Rank: 7Rank: 7Rank: 7

UID
155378
积分
2986
回帖
1024
主题
67
铜币
44294
威望
2435
银币
0
贡献
0
发书数
57
注册时间
2023-6-14
最后登录
2024-4-28
在线时间
1537 小时
发表于 2024-1-22 19:52 | 显示全部楼层
本帖最后由 edennow 于 2024-1-22 19:57 编辑
Venzos 发表于 2024-1-22 19:42
是的,就是不想要div标签整个包住。
因为里面还有不属于对话的内容,比如  林子道:
林子道:    是想 ...

那我提供下把:

“我是第一段话。
我是第二段话。
我是最后一段话。”

这种改成这种:

“我是第一段话。
“我是第二段话。
“我是最后一段话。”

的做法,可以参考下自己加标签。

搜索:
(“[^”“\n]*\n*)([  \t]*<p>)([^”“\n]*?”)
(“[^”“\n]*\n*)([  \t]*<p>)([^”“\n]*\n*)([  \t]*<p>)([^”“\n]*?”)
(“[^”“\n]*\n*)([  \t]*<p>)([^”“\n]*\n*)([  \t]*<p>)([^”“\n]*\n*)([  \t]*<p>)([^”“\n]*?”)

替换:
\1\2“\3
\1\2“\3\4“\5
\1\2“\3\4“\5\6“\7

以上是针对连续内容为 2、3、4 行的搜索和替换正则(只支持用 <p></p> 包起来的正文内容),观察下可以发现后续的结构和替换组的写法都是有规律的,可以按这个规律扩展至任意多行,并执行分组替换(可以把分组里的双引号换成需要的 span 之类的试一下)。

不过就是要用这多条正则来执行多次替换了,sigil 我不清楚是否支持正则递归,如果用递归写法可能不用这么麻烦,其他条件替换之类的功能我也不清楚是否支持。

这种方式比较笨哈,也可以参考下楼上老哥说的 epub 批量修改器试试行不行。

评分

参与人数 2威望 +5 铜币 +24 收起 理由
Venzos + 4 感谢提供技术支持~
baizhai1704 + 5 + 20 论坛有您更精彩!

查看全部评分

[发帖际遇]: edennow 闲逛长安街,因容貌扰民,被城管处罚 3 铜币. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

36

听众

0

收听

2

好友

翰林

Rank: 9Rank: 9Rank: 9

UID
225
积分
16515
回帖
5138
主题
23
铜币
55771
威望
13934
银币
26
贡献
0
发书数
3
注册时间
2015-5-6
最后登录
2024-4-28
在线时间
3986 小时

年度活动达人

发表于 2024-1-22 20:12 | 显示全部楼层
本帖最后由 chetiayi 于 2024-1-22 20:16 编辑
edennow 发表于 2024-1-22 19:52
那我提供下把:

“我是第一段话。

刚试了下是可以实现的
(?s)<p>.*:.*?”</p>      <p>     <p><span class="talk">
(?s)<p>.*:.*?”</p>      </p>    </span></p>
再在sigil里面
<p><span class="talk">(.*):
替换
<p>\1:<span class="talk">


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

参与人数 1铜币 +4 收起 理由
Venzos + 4 感谢提供技术支持~

查看全部评分

回复 支持 反对

使用道具 举报

15

听众

0

收听

13

好友

贡士

Rank: 7Rank: 7Rank: 7

UID
155378
积分
2986
回帖
1024
主题
67
铜币
44294
威望
2435
银币
0
贡献
0
发书数
57
注册时间
2023-6-14
最后登录
2024-4-28
在线时间
1537 小时
发表于 2024-1-22 20:16 | 显示全部楼层
chetiayi 发表于 2024-1-22 20:12
刚试了下是可以实现的
(?s).*:.*?”           
(?s).*:.*?”         

赞,这个插件是用了它说的预搜索来先限定了查找内容,还是很方便的哈,不过我就一直都是用脚本来处理的了。
[发帖际遇]: edennow 调戏牧羊犬,被咬,打防疫针,花费 4 铜币. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

11

听众

0

收听

2

好友

举人

Rank: 6Rank: 6

UID
137120
积分
1130
回帖
239
主题
24
铜币
25659
威望
996
银币
0
贡献
0
发书数
21
注册时间
2021-9-25
最后登录
2024-4-28
在线时间
218 小时
 楼主| 发表于 2024-1-22 20:21 | 显示全部楼层
chetiayi 发表于 2024-1-22 20:12
刚试了下是可以实现的
(?s).*:.*?”           
(?s).*:.*?”         

可以的,我去搞个插件去
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|阡陌居

GMT+8, 2024-4-28 15:32 , Processed in 0.044666 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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