我有由序列组成的文本文件。我的文本文件看起来像
我想删除空格前长度小于2的字符串。例如。第二个和第三个序列在空格之前只包含1个数字,我想丢弃那些字符串,但是第一个和最后一个序列由2个数字组成,这些数字将保留。 期望的输出将是:
我试过这个表达
s1.replaceAll("\\b[\\w']{1}\\b", "")
但我的输出看起来像
答案 0 :(得分:1)
由于你需要在第一个空格之前从一个数字(数字序列)开始删除 line ,你可以使用
s1.replaceAll("(?m)^\\d+\\s.*\r?\n?", "")
或(为了确保我们与换行符不匹配,请将\s
替换为[^\S\n]
):
s1.replaceAll("(?m)^\\d+[^\\S\n].*\r?\n?", "")
请参阅regex demo
模式匹配:
(?m)^
- 启用多行模式^
匹配行开头\\d+
- 一个或多个数字\\s
- 一个空格([^\S\n]
匹配任何空格但换行).*
- 任何字符,但新行尽可能多\r?\n?
- 一个或零\r
后跟\n
一次或零次。请参阅Java demo:
String s1 = "1,48 15\n1 15,32\n1 15,32,45\n1,45 15,32";
System.out.println(s1.replaceAll("(?m)^\\d+\\s.*\r?\n?", ""));
注意如果您有要忽略的前导空格,请使用
^\s*\d+\s.*\r?\n?
答案 1 :(得分:0)
您可以使用以下模式替换您的行:
String text =
"1,48 15"
+ System.getProperty("line.separator")
+ "1 15,32"
+ System.getProperty("line.separator")
+ "1 15,32,45"
+ System.getProperty("line.separator")
+ "1,45 15,32";
// | multi-line pattern flag
// | | start of line
// | || one character
// | || | followed by space
// | || | | etc.
// | || | | | replace with empty line
// | || | | |
System.out.println(text.replaceAll("(?m)^.{1}\\s.*?$", ""));
<强>输出强>
1,48 15
1,45 15,32
答案 2 :(得分:0)
尝试:
System.out.println(text.replaceAll("(?m)\\n^\\d\\s[^\\n]+", ""));
输出:
1,48 15
1,45 15,32
它也应该删除空行。