对答案的轻微修改效果很好! dropcaps">([a-zA-Z])</span>([^“]*)”
我正在编辑一些ePubs,我有一个系列,其中ePubs的发布方式不匹配。它会打扰我(我希望我的所有东西看起来都一样),所以我开始使用Sigil并更换封面,分离一些东西,并且通常让第二本书与第一本书相匹配。 / p>
现在我的问题出现在第一本书中,如果用引号打开一章,它会做这样的事情:
<p class="nonindent"><span class="dropcaps">“T</span>his is a quote,” Rob wrote to all of StackOverflow.</p>
但第二本书完全不同!我已经移动了一些CSS规则并使用了一些正则表达式来替换它的方式,但现在我遇到了另一个问题:
<p class="nonindent"><span class="dropcaps">F</span>orget an opening quote mark,” somebody told the publisher, “It'll just look silly.”</p>
现在,而不是一个漂亮的大“F
和其他文本正常,我只有一个大F(即使它是一个引用)。我喜欢用开头的引语来看它的样子,虽然我可以浏览每一章并查看,但我没有看过这本书,我也不想为自己破坏任何东西。
有没有办法可以找到缺少“
的地方并将其添加到哪里?
有几种不同的情况:
<p class="nonindent"><span class="dropcaps">W</span>hoops,” only one quote.</p>
<p class="nonindent"><span class="dropcaps">F</span>orget an opening quote mark,” somebody told the publisher, “It'll just look silly.”</p>
<p class="nonindent"><span class="dropcaps">T</span>his is a regular sentence. “Fun times!”</p>
<p class="nonindent"><span class="dropcaps">T</span>his is a regular sentence. No quotes at all!</p>
它总是“dropcaps”,所以我开始使用类似的东西:
dropcaps">([a-zA-Z])</span>(.*)”
并在答案dropcaps">([a-zA-Z])</span>([^"]*)”
中尝试了这一点,但这些在第三个示例(我不需要开放“
)上会失败,因为它们会添加“
1}}当我不需要时。
如果行中没有其他引号(如第一个示例),那将会有效,但在某些情况下(如第三个示例),有!我需要知道在它之前是否有一个“没有”,这将是它缺失的情况。用正则表达式做一个漂亮,干净的方法吗?
相同的解决方案适用于缺少任何开头的行(<
,(
,[
,{
),我刚刚意识到这一点。我会在此期间搜索,看看能不能找到类似的东西。
答案 0 :(得分:0)
sed中使用的以下正则表达式如何:
sed 's/dropcaps">\([a-zA-Z]\)<\/span>\([^“]*\)”/dropcaps">“\1<\/span>\2”/' < book2 > book2.fixed
此处,代码段\([a-zA-Z]\)
与[a-zA-Z]
匹配,并将匹配项存储为\1
以用于替换模式。第二个\([^"]*\)"
匹配一个字符序列,但引号以引号结尾并存储匹配为\2
。然后替换只是在正确的位置使用这些(开放)引用。
此解决方案假设在您的第二本书中,区分了三种引号:", ”, “
。如果不是这样的话,问题会变得更加困难。