java - 用 Java 编写我自己的维基百科查找和替换

标签 java

这是我尝试过的: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);
        }
    }
}

关于java - 用 Java 编写我自己的维基百科查找和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60676694/

相关文章:

java - 添加组件时 ScrollPane 展开

java - spring data jpa - 基于接口(interface)的投影中的自定义类型转换

java - 在分布式环境中使用JPA而不使用EJB

java - 具有更改操作栏操作的可标记 ListView

java - JUnit 性能测试 (Contiperf)

java - 为什么在这里省略泛型类型参数是可以接受的?

java - 动态 Bootstrap 弹出内容

java - 从 Spring Data Jpa 查询返回自定义对象

java - 使用ResourceDatabasePopulator时如何正确转义Oracle列名?

java - 删除由 JSTL 标签生成的新行