如何在 Java 正则表达式 API 中使用 Pattern、Matcher 来删除特定行
How to use Pattern, Matcher in Java regex API to remove a specific line
我有一个复杂的字符串拆分,我需要删除 comments、spaces,并保留所有numbers 但将所有 string 更改为 character。如果 -
符号在开头且后跟数字,则将其视为负数而不是运算符
评论的样式为?<space>comments<space>?
(评论为占位符)
输入:
-122+2 ? comments ?sa b
-122+2 ? blabla ?sa b
输出:
["-122","+","2","?","s","a","b"]
(所有字符串都变成字符,没有space,没有注释)
- 将不需要的字符串
\s*\?\s*\w+\s*(?=\?)
替换为 ""
。您可以链接 String#replaceAll
以删除任何剩余的空格。请注意,?=
表示 positive lookahead,此处表示 \s*\?\s*\w+\s*
后跟 ?
。我希望您已经知道 \s
指定空格,\w
指定单词字符。
- 然后你可以使用正则表达式,
^-\d+|\d+|\D
这意味着开头的负整数(即^-\d+
)或数字(即\d+
)或non-digit (\D
).
演示:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String str = "-122+2 ? comments ?sa b";
str = str.replaceAll("\s*\?\s*\w+\s*(?=\?)", "").replaceAll("\s+", "");
Pattern pattern = Pattern.compile("^-\d+|\d+|\D");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
}
输出:
-122
+
2
?
s
a
b
我有一个复杂的字符串拆分,我需要删除 comments、spaces,并保留所有numbers 但将所有 string 更改为 character。如果 -
符号在开头且后跟数字,则将其视为负数而不是运算符
评论的样式为?<space>comments<space>?
(评论为占位符)
输入:
-122+2 ? comments ?sa b
-122+2 ? blabla ?sa b
输出:
["-122","+","2","?","s","a","b"]
(所有字符串都变成字符,没有space,没有注释)
- 将不需要的字符串
\s*\?\s*\w+\s*(?=\?)
替换为""
。您可以链接String#replaceAll
以删除任何剩余的空格。请注意,?=
表示 positive lookahead,此处表示\s*\?\s*\w+\s*
后跟?
。我希望您已经知道\s
指定空格,\w
指定单词字符。 - 然后你可以使用正则表达式,
^-\d+|\d+|\D
这意味着开头的负整数(即^-\d+
)或数字(即\d+
)或non-digit (\D
).
演示:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String str = "-122+2 ? comments ?sa b";
str = str.replaceAll("\s*\?\s*\w+\s*(?=\?)", "").replaceAll("\s+", "");
Pattern pattern = Pattern.compile("^-\d+|\d+|\D");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
}
输出:
-122
+
2
?
s
a
b