我的文本文件采用以下格式,具有不同类型的字符串,例如:
candle
(air-paraffin)
1,000
°c
(1,800
°f)
smoldering
cigarette:
temperature
13%,
wildlife.[14]
johnston,
f.
h.;
keeley,
j.
bibcode:2009sci...324..481b
(http://adsabs.harvard.edu/abs/2009sci...3
我想删除除以下简单单词以外的所有内容。
smoldering
temperature
也就是说,如果一个词后跟一个逗号(例如闷烧,),我会删除它。
我试图从一开始就删除数字,MyString.replaceAll("^\\d", " ")
但即使这样也行不通。
如果将整个文件加载到内存中,并带有换行符,则可以使用这样的正则表达式:
text = text.replaceAll("(?m)^.*[^a-zA-Z\r\n].*(?:\R|$)", "")
输出
candle
smoldering
temperature
有关演示,请参阅regex101。
但是,最好在加载文本文件时进行过滤:
Pattern simpleWord = Pattern.compile("\\p{L}+"); // one or more Unicode letters
try (BufferedReader in = Files.newBufferedReader(Paths.get("path/to/file.txt"))) {
for (String line; (line = in.readLine()) != null; ) {
if (simpleWord.matcher(line).matches()) {
// found simple word
}
}
}
如果您想要列表中的简单单词,您可以使用 Java 8 流简化它:
List<String> simpleWords;
try (Stream<String> lines = Files.lines(Paths.get("path/to/file.txt"))) {
simpleWords = lines.filter(Pattern.compile("^\\p{L}+$").asPredicate())
.collect(Collectors.toList());
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句