gpt4 book ai didi

java - 使用 Apache POI 和 RegEx 来提取大写单词

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

所以我正在开发一个项目,从 Java 的 .doc 文件中提取大写单词。我正在使用正则表达式,但下面的正则表达式被某人在旧的 .vba 脚本中使用。我需要找到括号包围的所有大写单词。例如(WORD)。我知道下面的正则表达式会给我一个悬空元字符错误,那么正则表达式会是什么。

private static final String REGEX = "(*[A-Z]*[A-Z]*)";
private void parseWordText(File file) throws IOException {
FileInputStream fs = new FileInputStream(file);
HWPFDocument doc = new HWPFDocument(fs);
WordExtractor we = new WordExtractor(doc);
if (we.getParagraphText() != null) {
String[] dataArray = we.getParagraphText();
for (int i = 0; i < dataArray.length; i++) {
String data = dataArray[i].toString();
Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(data);
List<String> sequences = new Vector<String>();
while (m.find()) {
sequences.add(data.substring(m.start(), m.end()));
System.out.println(data.substring(m.start(), m.end()));
}
}
}
}

通过上面的代码和正则表达式,我得到两个大写字母,而不仅仅是带有括号的所有大写单词。

最佳答案

括号是正则表达式中的保留字符,因此您的第一个 * 不会修改任何内容。至少,你需要逃避它们:

\(*[A-Z]*[A-Z]*\)

但是,请不要停止阅读!应该注意的是,上面的正则表达式与:

\(*[A-Z]*\)

但最重要的是,我认为这不是您想要的正则表达式。我认为您正在 try catch 由括号包围的非零数量的连续大写字母,或者:

\([A-Z]+\)

“+”是一个或多个匹配,您会注意到我已经停止重复左括号。为了获得奖励积分,您可能需要处理括号开头或结尾的空格:

\(\s*[A-A]+\s*\)

但请注意,这将跨新行匹配。希望这有帮助!

关于java - 使用 Apache POI 和 RegEx 来提取大写单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12305071/

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