java - 类中的 Java 正则表达式匹配类
问题描述
嘿,所以我已经在互联网上搜索了各种示例,但我无法使用以下正则表达式。我正在尝试从与我的模式不匹配的字符串列表条目中删除每个字符。
例如,我的模式看起来像这样:e2-e4、d4-d5,有时可能会给出特定的最后一个字符。
首先,每一行都使用以下模式进行过滤:
List<String> lines = Files.readAllLines(Paths.get(String.valueOf(file)));
Pattern pattern = Pattern.compile("[a-h][1-8]-[a-h][1-8][BQNRbqnr]?");
List<String> filteredLines = lines.stream().filter(pattern.asPredicate()).collect(Collectors.toList());
但是,如果我输入了这样的 garbo1239%)@a2-a5,我希望将 garbo 过滤掉。
对于这个问题,我想出了以下解决方案:我遍历我的 String 列表并使用 replaceAll 方法过滤掉垃圾:
for(int i = 0; i < filteredLines.size(); i++){
filteredLines.set(i, filteredLines.get(i).replaceAll("[^[a-h][1-8]-[a-h][1-8]][BQNRbqnr]?",""));
}
不幸的是,它没有达到预期的效果。像 a2-a4d 或 h7-h614 这样的东西仍然没有被“清理”,我真的不知道为什么。我希望有人可以帮助我,在此先感谢!
解决方案
你可以这样做:
public class Main {
public static void main(String[] args) {
// Test strings
String[] arr = { "garbo1239%)@a2-a5", "a2-a4d", "h7-h614" };
for (String str : arr) {
System.out.println(str.replaceAll(".*?([a-h][1-8]-[a-h][1-8][BQNRbqnr]?).*", "$1"));
}
}
}
输出:
a2-a5
a2-a4
h7-h6
说明:用 group(1) 替换给定的字符串,$1
其中 group(1) 包含所需输出的正则表达式以及需要丢弃之前或之后的所有内容。
推荐阅读
- android - tinyAlsa 中的音频路由
- reactjs - 为什么 forEach 如果返回 []?
- r - 无法躲避 ggplot barplot 中的误差线
- c - 如何在不介入的情况下获取非当前目录的路径?
- vb.net - UseWaitCursor 在异步任务中不起作用
- flutter - 如何在颤动中创建具有不同文本样式的句子?
- git - 恢复(?)提交和拉取请求
- javascript - 传递给映射以检索值的无效键请求。处理这个异常
- node.js - 来自 nodejs 应用程序的发布请求时出现 503 错误
- python - Pandas loc 使用包含范围,而 iloc 在上侧使用独占