字符串模式查找,正则表达式是否适用于我的要求?
String pattern finding, Is Regex Applicable to my requirement?
我正在尝试从我在读取文件时得到的一些长字符串中找到一些字符串模式 (`"isempty var0"),我不确定 Regex 是否适用于我的要求?
更准确地说,在预期的字符串模式中 isempty
是一个关键字,在 space.
之后,它旁边会有一些 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
Currently i am trying to find the pattern using String.contains(),
String.CharAt(), String.indexOf() methods etc.
Though i am not sure if this can be solved with Regex?? If it can be can someone give some idea, What could be
the Regex to find this kind of pattern?
谢谢!
试试这个:
\bisempty\s+\w+
您的示例看起来很像您在尝试处理原始程序代码。
简短的回答是肯定的,您可以使用正则表达式模式来查看事物并确定它是否包含您要查找的值。 (\w+\s+\w+)
之类的东西将是一个起点,尽管最终可能会比这更复杂。
长答案是,如果您正在处理程序代码,您可能需要研究使用结构解析 API。使用关键字 java code parser
快速搜索 good 可以获得相当多的信息。解析器了解您的文本结构,因为正则表达式只能测试和检查它。因此,当您需要验证代码结构以及识别特定语法结构(例如 isempty x
构造)时,解析器可以提供帮助。
是的,您可以使用正则表达式(以多种方式)执行此操作。一种选择是 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_]+).*|.*", ""));
System.out.println(s2.replaceAll(".*\b(isempty\b\s+(?!\d+)[a-zA-z0-9_]+).*|.*", ""));
System.out.println(s3.replaceAll(".*\b(isempty\b\s+(?!\d+)[a-zA-z0-9_]+).*|.*", ""));
System.out.println(s4.replaceAll(".*\b(isempty\b\s+(?!\d+)[a-zA-z0-9_]+).*|.*", ""));
System.out.println(s5.replaceAll(".*\b(isempty\b\s+(?!\d+)[a-zA-z0-9_]+).*|.*", ""));
System.out.println(s6.replaceAll(".*\b(isempty\b\s+(?!\d+)[a-zA-z0-9_]+).*|.*", ""));
}
O/P :
isempty var0
isempty var3
isempty var2
isempty var3
PS :请注意,您不会在此处获得 null
(当字符串不是 "have" isempty someVar
时,您将获得空字符串。
我正在尝试从我在读取文件时得到的一些长字符串中找到一些字符串模式 (`"isempty var0"),我不确定 Regex 是否适用于我的要求?
更准确地说,在预期的字符串模式中 isempty
是一个关键字,在 space.
输入字符串可以是这样的:
"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
Currently i am trying to find the pattern using String.contains(), String.CharAt(), String.indexOf() methods etc.
Though i am not sure if this can be solved with Regex?? If it can be can someone give some idea, What could be the Regex to find this kind of pattern?
谢谢!
试试这个:
\bisempty\s+\w+
您的示例看起来很像您在尝试处理原始程序代码。
简短的回答是肯定的,您可以使用正则表达式模式来查看事物并确定它是否包含您要查找的值。 (\w+\s+\w+)
之类的东西将是一个起点,尽管最终可能会比这更复杂。
长答案是,如果您正在处理程序代码,您可能需要研究使用结构解析 API。使用关键字 java code parser
快速搜索 good 可以获得相当多的信息。解析器了解您的文本结构,因为正则表达式只能测试和检查它。因此,当您需要验证代码结构以及识别特定语法结构(例如 isempty x
构造)时,解析器可以提供帮助。
是的,您可以使用正则表达式(以多种方式)执行此操作。一种选择是 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_]+).*|.*", ""));
System.out.println(s2.replaceAll(".*\b(isempty\b\s+(?!\d+)[a-zA-z0-9_]+).*|.*", ""));
System.out.println(s3.replaceAll(".*\b(isempty\b\s+(?!\d+)[a-zA-z0-9_]+).*|.*", ""));
System.out.println(s4.replaceAll(".*\b(isempty\b\s+(?!\d+)[a-zA-z0-9_]+).*|.*", ""));
System.out.println(s5.replaceAll(".*\b(isempty\b\s+(?!\d+)[a-zA-z0-9_]+).*|.*", ""));
System.out.println(s6.replaceAll(".*\b(isempty\b\s+(?!\d+)[a-zA-z0-9_]+).*|.*", ""));
}
O/P :
isempty var0
isempty var3
isempty var2
isempty var3
PS :请注意,您不会在此处获得 null
(当字符串不是 "have" isempty someVar
时,您将获得空字符串。