java - 用 Java 编写我自己的 Wikipedia 查找和替换
问题描述
这是我尝试过的:https ://github.com/curiprogrammer/WikiToLaTeX/tree/master/src
下面以文字为例:
<!-- Hinweis: Der Artikel [[Konkatenation (Formale Sprache)]] verweist auf diese Überschrift-->
Die '''Konkatenation''' zweier Sprachen <math>L_1</math> und <math>L_2</math> ist die Sprache der Wörter, die durch Hintereinanderschreibung ([[Konkatenation (Wort)|Konkatenation]]) je eines beliebigen Wortes <math>u</math> aus <math>L_1</math> und <math>v</math> aus <math>L_2</math> entsteht:
:<math>L_1 \circ L_2 := \{ uv \mid u \in L_1, v \in L_2 \}</math>.
So sind zum Beispiel die Konkatenationen von verschiedenen Sprachen über dem Alphabet <math>\Sigma = \{ a ,\, b \}</math>:
:<math>\{ a \} \circ \{ ab \} = \{ aab \}</math>
:<math>\{ a ,\, bb \} \circ \{ aa ,\, b \} = \{ aaa ,\, ab ,\, bbaa ,\, bbb \}</math>
:<math>\{ abb ,\, bab \} \circ \{ \varepsilon ,\, aab ,\, bb \} = \{ abb ,\, bab ,\, abbaab ,\, babaab ,\, abbbb ,\, babbb \}</math>
Heinrich Scholz traf sich 1944 mit [[Konrad Zuse]], der im Zuge seiner Doktorarbeit an seinem [[Plankalkül]] arbeitete. Im März 1945 sprach ihm Scholz für die Anwendung seines Logikkalküls seine Anerkennung aus.<ref>[[Hartmut Petzold]],''Moderne Rechenkünstler. Die Industrialisierung der Rechentechnik in Deutschland.'' München, C.H. Beck Verlag, 1992.</ref>
我想将上面看到的维基百科代码转换为 LaTeX 代码。为此,我需要删除一些类似的词<!-- SOMETHING SOMETHING -->
或替换其他词。示例:将每个 : 替换为 \begin{equation} + \n 并将以下内容替换为 \end{equation}。但是如果前面没有冒号,则应该一直是$,也应该是$。然后是 [[TEXT|text2]] ...它应该自己转换为 text2 。
我真的不知道如何开始这个项目。Java中有一个 .replaceAll() 函数。但它不起作用,因为我需要提到的情况。关于如何制作这个项目的任何提示和想法?
提前致谢!
解决方案
对于这种情况,您可以使用正则表达式。
示例:此正则表达式可以捕获由 wiki 标签保存的文本。捕获文本后,您可以使用 replaceAll 方法。
(:<math>)(.*?)(</math>)
实时编码:https ://wandbox.org/permlink/RGE6nIwxLtN1F3GY
import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Wandbox
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String regex1 = "(<math>)(.*?)(</math>)";
Pattern p1 = Pattern.compile(regex1);
String regex2 = "(:<math>)(.*?)(</math>)";
Pattern p2 = Pattern.compile(regex2);
while (sc.hasNextLine()) {
String line = sc.nextLine();
// remove html comment tag
String replaced = line.replaceAll("<!--.*-->", "");
Matcher m2 = p2.matcher(replaced);
replaced = m2.replaceAll("\\\\\\\\begin\\{equation}\n$2\n\\\\\\\\end\\{equation\\}\n");
Matcher m1 = p1.matcher(replaced);
replaced = m1.replaceAll("\\$$2\\$");
System.out.println(replaced);
}
}
}
推荐阅读
- javascript - 如何在 JS 中编写异步代码?
- javascript - Javascript 不导入从 git 安装的 npm 包
- javascript - Javascript +新日期
- opencv - 高架计算机视觉 人数统计
- python - 我可以在创建字典时引用字典值吗?
- php - 在动态 php carousel 中转换 html carousel
- swift - 闭包与从函数返回值/对象
- angular - Angular 渲染器与 Angular 编译器
- sql-server - 在具有特定值的其他记录之前添加新行
- regex - 选择长度超过 XX 个符号的部分字符串,不包括某些文本