gpt4 book ai didi

java - java中如何从乱七八糟的字符串中抓取文本?

转载 作者:行者123 更新时间:2023-12-01 10:07:26 26 4
gpt4 key购买 nike

我正在阅读一个文本文件,其中包含电影标题、年份、语言等。我正在努力捕获这些属性。

假设一些字符串是这样的:

 String s = "A Fatal Inversion" (1992)"
String d = "(aka "Verhngnisvolles Erbe" (1992)) (Germany)"
String f = "\"#Yaprava\" (2013) "
String g = "(aka \"Love Heritage\" (2002)) (International: English title)"

如果指定的话,我如何获取标题、年份、国家/地区,如果从中指定的话,会是什么样的标题?

我不太擅长使用正则表达式和模式,但我不知道在未指定它们的情况下如何找到它是什么类型的属性。我这样做是因为我试图从文本文件生成 xml。我有它的 dtd,但我不确定我是否需要它在这种情况下使用它。

编辑:这是我尝试过的。

    String pattern;
Pattern p = Pattern.compile("\"([^\"]*)\"");
Matcher m;



Pattern number = Pattern.compile("\\d+");
Matcher num;

m = p.matcher(s);

num = number.matcher(s);

if(m.find()){
System.out.println(m.group(1));
}

if(num.find()){
System.out.println(num.group(0));
}

最佳答案

我建议您首先提取年份,因为这看起来相当一致。然后我会提取国家/地区(如果存在),其余部分我假设是标题。

为了提取国家/地区,我建议您使用已知国家/地区的名称硬编码正则表达式模式。可能需要一些迭代才能确定它们是什么,因为它们似乎非常不一致。

这段代码有点难看(但数据也是如此!):

public class Extraction {
public final String original;
public String year = "";
public String title = "";
public String country = "";

private String remaining;

public Extraction(String s) {
this.original = s;
this.remaining = s;
extractBracketedYear();
extractBracketedCountry();
this.title = remaining;
}

private void extractBracketedYear() {
Matcher matcher = Pattern.compile(" ?\\(([0-9]+)\\) ?").matcher(remaining);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
this.year = matcher.group(1);
matcher.appendReplacement(sb, "");
}
matcher.appendTail(sb);
remaining = sb.toString();
}

private void extractBracketedCountry() {
Matcher matcher = Pattern.compile("\\((Germany|International: English.*?)\\)").matcher(remaining);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
this.country = matcher.group(1);
matcher.appendReplacement(sb, "");
}
matcher.appendTail(sb);
remaining = sb.toString();
}

public static void main(String... args) {

for (String s : new String[] {
"A Fatal Inversion (1992)",
"(aka \"Verhngnisvolles Erbe\" (1992)) (Germany)",
"\"#Yaprava\" (2013) ",
"(aka \"Love Heritage\" (2002)) (International: English title)"}) {

Extraction extraction = new Extraction(s);
System.out.println("title = " + extraction.title);
System.out.println("country = " + extraction.country);
System.out.println("year = " + extraction.year);
System.out.println();
}
}

}

产品:

title   = A Fatal Inversion
country =
year = 1992

title = (aka "Verhngnisvolles Erbe")
country = Germany
year = 1992

title = "#Yaprava"
country =
year = 2013

title = (aka "Love Heritage")
country = International: English title
year = 2002

获得此数据后,您可以进一步操作它(例如“国际:英文标题”->“英格兰”)。

关于java - java中如何从乱七八糟的字符串中抓取文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36349106/

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