基本思想是我想用“text1.text2”形式提取字符串的任何部分。我想做的输入和输出的一些例子是:
"employee.first_name" ==> "employee.first_name"
"2 * employee.salary AS double_salary" ==> "employee.salary"
到目前为止,我只有.split(“”),然后找到了我需要的东西和.split(“。”)。有没有更清洁的方式?
答案 0 :(得分:2)
我会使用实际的Pattern
和迭代查找,而不是分割String
。
例如:
String test = "employee.first_name 2 * ... employee.salary AS double_salary blabla e.s blablabla";
// searching for a number of word characters or puctuation, followed by dot,
// followed by a number of word characters or punctuation
// note also we're avoiding the "..." pitfall
Pattern p = Pattern.compile("[\\w\\p{Punct}&&[^\\.]]+\\.[\\w\\p{Punct}&&[^\\.]]+");
Matcher m = p.matcher(test);
while (m.find()) {
System.out.println(m.group());
}
输出:
employee.first_name
employee.salary
e.s
注意:要简化Pattern
,您只能列出形成“。”的允许标点符号 - 类别中的单词
例如:
Pattern p = Pattern.compile("[\\w_]+\\.[\\w_]+");
这样,foo.bar*2
将匹配为foo.bar
答案 1 :(得分:1)
您需要使用split
将字符串分解为片段。然后使用.
方法在每个片段中搜索contains
,以获取所需的片段:
你走了:
public static void main(String args[]) {
String str = "2 * employee.salary AS double_salary";
String arr[] = str.split("\\s");
for (int i = 0; i < arr.length; i++) {
if (arr[i].contains(".")) {
System.out.println(arr[i]);
}
}
}
答案 2 :(得分:0)
String mydata = "2 * employee.salary AS double_salary";
pattern = Pattern.compile("(\\w+\\.\\w+)");
Matcher matcher = pattern.matcher(mydata);
if (matcher.find())
{
System.out.println(matcher.group(1));
}
答案 3 :(得分:0)
我不是JAVA的专家,但是当我在python中使用正则表达式并基于互联网教程时,我建议你使用r'(\S*)\.(\S*)'
作为模式。我在python中试过它,它在你的例子中运行良好。
但是如果你想连续使用多个点,那就有一个bug。我的意思是,如果您尝试匹配first.second.third
之类的内容,此模式会将('first.second', 'third')
标识为匹配组,我认为它与最佳匹配策略相关。