清理文本:从所有大写到<em>全部大写</em>

时间:2011-11-25 10:26:34

标签: html regex notepad++

我需要为使用ALLCAPS而不是斜体的html清理一些文本。所以我想采取看起来像这样的东西:

Here is an artificial EXAMPLE of a piece of TEXT that
uses allcaps as a way of EMPHASIZING words.

并将其转换为:

Here is an artificial <em>example</em> of a piece of <em>text</em> that
uses allcaps as a way of <em>emphasizing</em> words.

我用正则表达式和记事本++标记这个,但是(你可以告诉我)我不知道如何使用它们的第一件事。

4 个答案:

答案 0 :(得分:2)

Notepad ++正则表达式引擎没有这种可能性。

您可以在Perl中运行执行该作业的脚本,例如:

perl -pi.back -e "s#\b([A-Z]+)\b#'<em>'.lc($1).'</em>'/eg" yourfile.html

yourfile.html将保存在yourfile.html.back

答案 1 :(得分:0)

以下是使用JavaScript的字符串替换方法执行此操作的方法:

var capfix = function (x) {
    var emout = function (y) {
        y = y.charAt(0) + "<em>" + y.toLowerCase() + "</em>" + y.charAt(y.length - 1);
    };
    return x.replace(/\s[A-Z]\s/g, emout);
};

执行刚刚通话:

capfix(yourData);

这假定“yourData”只是一个将数据表示为字符串的变量。如果您想使用Web工具,那么“yourData”可以表示某些输入控件的值,如下所示:

var yourData = document.getElementById("myinput").value;
alert(capfix(yourData));

为了完成这项工作,只需在您的网络工具输入中添加一个id属性,例如:

<textarea id="myinput"></textarea>

答案 2 :(得分:0)

据我所知,Notepad ++的regex engine还不够先进。

我建议使用编程语言来实现这一点,例如在PHP中你可以这样做:

echo preg_replace_callback('/([A-Z]{2,})/', create_function('$s', 'return "<em>".strtolower($s[0])."</em>";'), $s);

请务必在正则表达式中排除单个单词的合法首字母大写字母。

答案 3 :(得分:0)

AFAIK你不能在Notepad ++的Find\Replace机制中改变套管。

如果只需插入<em>代码,则可以执行以下操作:
Find框中输入(\s+)([A-Z]+)(\s+)Replace类型\1<em>\2</em>\3中的abd。

您可以在TextFX子菜单中尝试一些TextFX Characters工具。