使用正则表达式或任何其他东西,我需要匹配任何包含至少一个全大写单词的段落。
然后将其转换为标题并将标题的所有内容大写。在下面的例子中,单词这里应该改为这里. 其中包括重音字符。
我怎样才能做到这一点?
<P STYLE="margin-bottom: 0cm"><BR>
</P>
</DIV>
<P CLASS="western" ALIGN=CENTER STYLE="margin-bottom: 0cm; line-height: 0.42cm">
<FONT SIZE=4><B>TITLE Here</B></FONT></P>
我正在使用 Linux。
答案1
您几乎肯定可以使用控制台命令来执行此操作,但这听起来像是一次性修复工作,而不是常规工作,因此我会使用我最喜欢的图形正则表达式工具,即非常方便的开源程序员文本编辑器 jEdit。(参见jedit.org了解详情。
安装 jEdit 后,您可以通过按 Ctrl+F 或转到“搜索”菜单并选择“查找”项来打开“搜索和替换”对话框。
在“搜索和替换”对话框中,您需要选择要使用的“搜索范围”选项。“当前缓冲区”将仅更改当前文件,“所有缓冲区”将更改 jEdit 中当前打开的所有文件,“目录”选项将允许您更改目录(您在对话框底部指定)中与您指定的过滤器(例如 或*.html
)匹配的所有文件*.php
。“目录”选项非常强大,可能是您需要的选项,但要非常小心地使用它,并仔细检查您的搜索/替换不会因以您未考虑的方式匹配而导致意外更改。
接下来您需要勾选对话框中间的“正则表达式”框。
现在在“搜索”文本框中输入要使用的正则表达式,以定位需要更改的文本。如果我理解您的要求,这个正则表达式模式可能会完成这项工作:
(?<=>)([^<]*\p{Lu}{2,}[^<]*)(?=<)(?!</script)
此模式表示“选择以 为开头的文本>
,该文本包含任意数量的不是 的字符,<
然后至少包含两个连续的大写字母,然后包含任意数量的不是 的字符<
,最后跟随<
但不跟随</script
”。
然后您需要选择“返回 BeanShell 代码片段的值”选项并在“替换为”文本框中输入:
_1.toUpperCase()
这个 BeanShell 代码片段只是说“正则表达式匹配的第一个捕获组中捕获的文本,转换为大写”。
我已经测试过它,它顺利地遍历 HTML 文件,找到包含两个或更多连续大写字符的连续原始文本序列。请注意,任何包含 UK 或 USB 等无害内容的段落也将通过此正则表达式匹配,因此您可能需要将量词更改{2,}
为,{4,}
以便必须至少有四个连续的大写字符才能匹配序列。
另外,在对有价值的文件或文件集进行此操作之前,请务必仔细测试(并确保首先备份所有原始文件,以便在出现问题而您在保存更改之前没有注意到时可以恢复它们)。