-->

正则表达式:查找HTML标签之间的小写字母组(Regex: Find groups of lower

2019-08-22 01:45发布

我试图开发可在运行的正则表达式印记 ,该电子版2编辑器。

小盘股是当前的ePub读者生态系统中一个众所周知的问题。 许多读者,如Adobe Digital Editions的,不支持“字体变体:小型股”。 尝试几种不同的解决方法后,我已经定居在通过转换文本创建虚假小型大写字母大写,并设置先前小写字母“FONT-SIZE:0.75em”。

这个过程是极其乏味,尤其是与有大量尾注与其他书籍引用图书工作。

说我有一堆词组在标有“SC”类的HTML页面。 我创建了一个测试短语:

<span class="SC">Hello World! Testing: one tWo thrEE &amp; W.T.F.</span>
<span class="foo">Don't touch me!</span>

我们的目标是编写了“SC”跨度只有标签内匹配任何小写字母一个正则表达式,并与替换它们:

<span class="FSC">LETTERS</span>

我可以管理相匹配,并在第一个字“喂”替换字母,但一切后,打破了。

下面是我到目前为止有:

找:

(<span class="SC">.*?)([a-z]+)(.*</span>)

更换:

\1<span class="FSC">\U\2\E</span>\3

那么棘手的部分是继续寻找该标签中的小写字母的休息,现在,一个新的“FSC”(假小型股)span标签已经出台。 尝试相同的正则表达式再次导致“跨度”,然后在“类”获得FSC处理。 理想情况下,我想能够只是不停的按“全部替换”按钮,直到没有更多的找到匹配。

上面的例子应该是这样完成后:

<span class="SC">H<span class="FSC">ELLO</span> W<span class="FSC">ORLD</span>! T<span class="FSC">ESTING</span>: <span class="FSC">ONE</span> <span class="FSC">T</span>W<span class="FSC">O</span> <span class="FSC">THR</span>EE &amp; W.T.F.</span>
<span class="foo">Don't touch me!</span>

这不是很漂亮,但它的工作原理上,我已经测试了每一个读者的ePub。

如果谷歌“EPUB小盘股正则表达式”,你会遇到,我编辑,以包括此正则表达式,我已经决定一个MobileRead wiki文章并不尽如人意:

(<span class="[a-zA-Z0-9\- ]*?(?<!F)SC[a-zA-Z0-9\-]*?">(?:.+?<span class="FSC">.+?</span>)*[\.|,|:|;|-|–|—|!|\?]? ?(?:&amp;)? ?[A-Z]+)([a-z'’\. ]+)(.*?</span>)

这结束了小型化一串标点符号,有时在一个短语的中间站。 我开始了,心想有可能是一个更好的解决方案,不尝试计划为每一个可能性了前面。

如果有人想出了一个更好的解决这个,你会整本EPub出版业的英雄。

更新

我已经添加了公认的(唯一的)答案移动阅读维基 。 请注意,这正则表达式已经在使用印记专门涂改的; YMMV在其他环境中。

Answer 1:

完美的用例为: 关闭和捕获在一个单一的正则表达式表达一种重复模式:

修改它你的情况:

(<span class="SC">(?:(?!<\/span>)(?:[^a-z&]|&[^;]+;))*|(?!^)\G(?:(?!<\/span>)(?:[^a-z&]|&[^;]+;))*)([a-z]+)

替换为: \1<span class="FSC">\U\2\E</span>

而这里的正则表达式解释说: http://regex101.com/r/jU6bA5

这是“ 全部替换 ”,因为它通过正则表达式全球改性剂有效的解决方案/g



文章来源: Regex: Find groups of lowercase letters between HTML tag
标签: html regex epub