我试图在读取文件时找到一些长字符串中的字符串模式(`“isempty var0”),我不确定Regex是否适用于我的要求?
更准确地说,在预期的字符串模式中isempty
是一个关键字,并且在一些空格之后会有一些java变量。
输入字符串可以是这样的:
"isempty var0 && v1== 56"
"v2 == 50 || isempty var1"
"Q3 == 100 || (isempty var2)"
"isempty var3"
"is thisnotisempty var4"
预期产出是:
"isempty var0"
"isempty var1"
"isempty var2"
"isempty var3"
null
目前我正在尝试使用String.contains()查找模式, String.CharAt(),String.indexOf()方法等。
虽然我不确定这是否可以用Regex解决?如果可以,有人可以提出一些想法,可能是什么 正则表达式找到这种模式?
谢谢!
答案 0 :(得分:1)
答案 1 :(得分:1)
您的示例与您尝试处理原始程序代码非常相似。
简短的答案是肯定的,你可以使用正则表达式模式来查看事物,并确定它是否包含您要查找的值。像(\w+\s+\w+)
这样的东西将是一个起点,尽管它可能会比这更复杂。
答案很长,如果您正在处理程序代码,则可能需要考虑使用纹理解析API。使用关键字java code parser
进行快速搜索可以获得相当多的关键字。解析器理解文本的结构,因为正则表达式只能测试和检查它。因此,当您需要验证代码的结构以及识别特定的语法结构(例如isempty x
构造)时,解析器可以提供帮助。
答案 2 :(得分:1)
是的,您可以使用正则表达式(以多种方式)执行此操作。一个选项是replaceAll
:
public static void main(String[] args) throws Exception {
String s1 = "isempty var0 && v1== 56";
String s2 = "isempty var3";
String s3 = "is thisnotisempty var4";
String s4 = "is thisnotisempty 4var4"; // returns empty string. Java variable names cannot start with a number.
String s5 = "Q3 == 100 || (isempty var2)";
String s6 = "isempty var3";
System.out.println(s1.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1"));
System.out.println(s2.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1"));
System.out.println(s3.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1"));
System.out.println(s4.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1"));
System.out.println(s5.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1"));
System.out.println(s6.replaceAll(".*\\b(isempty\\b\\s+(?!\\d+)[a-zA-z0-9_]+).*|.*", "$1"));
}
O / P:
isempty var0
isempty var3
isempty var2
isempty var3
PS:请注意,您不会在这里获得null
(当字符串没有""#34; isempty someVar
时,您将获得空字符串。