gpt4 book ai didi

java - 如何更改正则表达式来处理数据异常值?

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

理想情况下,我的所有数据如下所示:

William Faulkner - 'Light In August'
William Faulkner - 'Sanctuary'
William Faulkner - 'The Sound and the Fury'

在这种情况下,这个正则表达式似乎可以正常工作:

Pattern pattern = Pattern.compile("^\\s*(.*)\\s+-\\s+'(.*)'\\s*$");
Matcher matcher = pattern.matcher("William Faulkner - 'Light In August'");

if (matcher.matches()) {
String author = matcher.group(1).trim();
String bookTitle = matcher.group(2).trim();

System.out.println(author + " / " + bookTitle);
}
else {
System.out.println("No match!");
}

但有时我的数据包含这样的示例,这些示例似乎与上面的模式不匹配:

Saki - 'Esme'
Saki - 'The Unrest Cure' (Second Edition)
Saki (File Under: Hector Hugh Munro) - 'The Interlopers' (Anniversary Multi-pack)
William Faulkner - 'The Sound and the Fury' (Collector's Re-issue)
'The Sound and the Fury'
The Sound and the Fury
The Bible (St James Version)

在所有不存在连字符的情况下,这些都是没有作者的书名。我还没有发现任何作者名字出现而没有书名的情况。

如何更改我的正则表达式以正确处理此问题?

最佳答案

此正则表达式匹配您描述的所有情况:

  ^\s*(?:(.*)\s+-\s+)?'?([^']+'?.*)\s*$

作为Java字符串,它是:"^\\s*(?:(.*)\\s+-\\s+)?'?([^']+'?.*)\\s*$"

如果您使用 JDK7,则可以使用命名捕获组,如下所示:

  ^\s*(?:(?<Author>.*)\s+-\s+)?'?(?<Title>[^']+'?.*)\s*$

哪里<$<Author><$<Title>在替换部分引用捕获的组。

关于java - 如何更改正则表达式来处理数据异常值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3964260/

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