regex - 如何在java中修剪以字符开头和结尾的特定行
问题描述
我已将多行字符串存储在 java 中,如下面的代码所示,它显示输出为:
啊
bb
hhh 我 $ hdddhd hhhdhhdhh
hrx
$
dddss
我不需要以 hhh me $ 开头的行以及行间到 $ 的行。
我需要得到输出
啊
bb
hrx
dddss
我在eclipse上试过这样
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class dummyFile {
public static void main(String[] args) throws FileNotFoundException {
String line = new StringBuilder()
.append("aa\n\n")
.append("bb\n\n")
.append("hhh me $ hdddhd hhhdhhdhh\n\n")
.append("hrx\n\n")
.append("$\n\n")
.append("dddsss")
.toString();
System.out.println(line);
String pattern = "hhh me (.)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
if (m.find())
{
System.out.println(m.group(1));
}
if (line.contains("hhh me "+ m.group(1)))
{
line.replace(
line.substring(
line.indexOf("banner mod " +m.group(1)),
line.lastIndexOf(m.group(1))+1
),
""
)
.replace("\n\n", "\n");
}
System.out.println(line);
}
}
有人可以帮忙吗?
解决方案
唷,这很有趣(如果你像我一样疯了!)
(?!.*?\$.*?)^.+?(?:\n\n|$).*?
您将需要正则表达式选项global
和multiline
. 对于大多数正则表达式实例,只需将其格式化为:
/(?!.*?\$.*?)^.+?(?:\n\n|$).*?/gm
但是对于 Java,您可能需要提供一些选项,我不能 100% 确定。
该模式将为您提供多个匹配项,例如,您可以使用 StringBuilder 将它们粘合在一起。
如果你真的想要,我会编辑我的答案,如果你需要我,我会准确地分解它在做什么。
推荐阅读
- jupyter-lab - 如何在 jupyterlab 启动器中添加自定义文件类型?
- c# - 如何对连接的 TPL 数据流块进行错误处理?
- node.js - AWS MSK 触发器 - Lambda(消费者)无限运行
- java - 映射外键 JPA
- javascript - 无法让 Google Sheets Node.js API 从工作表中获取值并将它们返回到数组中
- python - 如何使用 pyautogui 添加开和关按钮?
- python-3.x - 将数据从一个视图传递到另一个视图:Django
- android - 在最新版本的 android studio 中哪里可以找到 r.java
- git - 如何在所有 git 提交中搜索涉及多个字符串的更改,并对未更改的内容有一定的限制?
- flutter - flutter pub get : - fstore 依赖于来自依赖 async 2.8.1 的路径中的激发 UI,需要 async 2.8.1