gpt4 book ai didi

java正则表达式清除mediawiki标记

转载 作者:行者123 更新时间:2023-12-01 05:05:00 25 4
gpt4 key购买 nike

Possible Duplicate:
Wikipedia : Java library to remove wikipedia text markup removal

我必须清理一些来自 Confluence 的内容。该内容几乎是干净的;但是,有一些事情,例如:

  1. [link|]:不带 url 部分的链接
  2. *[link|]*:粗体链接(不带 url 部分)
  3. *文本*:粗体文本
  4. _*text*_:斜体粗体文本

等等。我需要编写一个正则表达式来清理所有这些,所以,我做了类似的事情:

String wikiCleanMarkupRegex = "\\\\[(.*?)[\\\\|.*?]?\\\\]|\\\\*(.*?)\\\\*|_(.*?)_";

但这并不能清除所有内容,我的意思是,如果我给它#2 中的链接,我将得到:

[链接|]

这不是我想要的,我想要得到“链接”...所以,我需要一次又一次地重新解析字符串,直到找不到其他匹配。

这真的很慢,因为有数百万条记录需要清理,所以,有什么方法可以一次性完成所有的正则表达式吗?

非常感谢。

最佳答案

看起来基本上是三种类型的代码格式:斜体粗体LINK

我将做一个 3 遍正则表达式替换器。

根据您给出的输入,优先顺序应该是:

/**
* FIRST REMOVE ITALICS, THEN BOLD, THEN URL
*/
public static String cleanWikiFormat(CharSequence sequence) {
return Test.removeUrl(Test.removeBold(Test.removeItalic(sequence)));
}

这是一个示例代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Test {

private static String removeItalic(CharSequence sequence) {
Pattern patt = Pattern.compile("_\\*(.+?)\\*_");
Matcher m = patt.matcher(sequence);
StringBuffer sb = new StringBuffer(sequence.length());
while (m.find()) {
String text = m.group(1);
// ... possibly process 'text' ...
m.appendReplacement(sb, Matcher.quoteReplacement(text));
}
m.appendTail(sb);
return sb.toString();
}

private static String removeBold(CharSequence sequence) {
Pattern patt = Pattern.compile("\\*(.+?)\\*");
Matcher m = patt.matcher(sequence);
StringBuffer sb = new StringBuffer(sequence.length());
while (m.find()) {
String text = m.group(1);
// ... possibly process 'text' ...
m.appendReplacement(sb, Matcher.quoteReplacement(text));
}
m.appendTail(sb);
return sb.toString();
}


private static String removeUrl(CharSequence sequence) {
Pattern patt = Pattern.compile("\\[(.+?)\\|\\]");
Matcher m = patt.matcher(sequence);
StringBuffer sb = new StringBuffer(sequence.length());
while (m.find()) {
String text = m.group(1);
// ... possibly process 'text' ...
m.appendReplacement(sb, Matcher.quoteReplacement(text));
}
m.appendTail(sb);
return sb.toString();
}


public static String cleanWikiFormat(CharSequence sequence) {
return Test.removeUrl(Test.removeBold(Test.removeItalic(sequence)));
}

public static void main(String[] args) {
String text = "[hello|] this is just a *[test|]* to clean wiki *type* and _*formatting*_";
System.out.println("Original");
System.out.println(text);
text = Test.cleanWikiFormat(text);
System.out.println("CHANGED");
System.out.println(text);
}
}

以下内容将给出:

Original
[hello|] this is just a *[test|]* to clean wiki *type* and _*formatting*_
CHANGED
hello this is just a test to clean wiki type and formatting

关于java正则表达式清除mediawiki标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12846866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com