使用JAVA在句子中查找与特定正则表达式匹配的单词

使用JAVA在句子中查找与特定正则表达式匹配的单词,java,regex,Java,Regex,我试图生成一条动态消息,该消息可用于使用Java和正则表达式进行处理。我的传入值可以是“$bdate$”,也可以嵌入到“您的生日:$bdate$”这样的句子中。我想在运行时动态替换这些$aaa$值,但无法在句子中隔离正则表达式匹配的值。这是我到目前为止所拥有的 package com.test; import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; public class TestRe

我试图生成一条动态消息,该消息可用于使用Java和正则表达式进行处理。我的传入值可以是“$bdate$”,也可以嵌入到“您的生日:$bdate$”这样的句子中。我想在运行时动态替换这些$aaa$值,但无法在句子中隔离正则表达式匹配的值。这是我到目前为止所拥有的

package com.test;

import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;

public class TestRegex {
    public static String REGEX = "\\$((?:[a-zA-Z0-9_ ]*))\\$";

    public static String testString = "Summary : $summary$"
                                    + "Age : $age$"
                                    + "Location : $location$"; 
    public static void main(String[] args) {
        System.out.println("Matcher : " + Pattern.matches(REGEX, "$ABX_ 11$"));

        String [] splitStrings = testString.split("\\W+"); //also tried "\\b+"
        List<String> stringList = Arrays.asList(splitStrings);
        for(String test : stringList) {
            System.out.println("Split Word : " + test);
        }
    }
}

我知道我很接近,但无法找出问题所在-有人能帮忙吗

您可以使用以下选项:

String pattern = "\\w+|\\$\\w+\\$";

Pattern r = Pattern.compile(pattern);

Matcher m = r.matcher(testString);
while (m.find( )) {
   System.out.println("Found value: " + m.group(0) );
}

请参见

扩展@Karthik的答案并完成下面的线程,代码片段仅查找与句子中模式匹配的单词并收集它们-在运行时动态替换这些单词可能更容易

package com.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestRegex {
    public static String testString = "Summary : $summary$"
                                    + "Age : $age$"
                                    + "Location : $location$"; 
    public static void main(String[] args) {
        String pattern = "\\$\\w+\\$";

        Pattern r = Pattern.compile(pattern);

        Matcher m = r.matcher(testString);
        while (m.find( )) {
           System.out.println("Found value: " + m.group(0) );
        }
    }
}

你为什么要那样把弦分开?您实际上没有在那里使用正则表达式。请隔离$aaa$单词,以便我可以用运行时数据替换它们。但您没有使用正则表达式。因此,您实际上并没有隔离
$aaa$
单词,您只是隔离单词。正确的方法可能是使用
Matcher
,请参阅。感谢Karthik,尝试了您的建议,但得到了以下结果:拆分单词:摘要拆分单词:$Summary$Age拆分单词:$Age$Location拆分单词:$Location$猜测我们需要找到以$开头,以$结尾的单词。不确定正则表达式是什么。你能在我发布的java程序中尝试一下吗?输出与演示中的不同。@Prashanth预期的输出是什么?每个单词,尤其是要分隔$xxx$的单词。有没有办法让他们分开?我知道字符串中的第一行和第二行之间没有空格,但这是另一个团队的输入-因此,我不能要求他们在每行末尾加空格。也许更好的方法是使用正则表达式从句子中单独提取$xxx$单词,而不像我尝试的那样解析每个单词?这将使我更容易替换值并保持原始字符串的完整性。
package com.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestRegex {
    public static String testString = "Summary : $summary$"
                                    + "Age : $age$"
                                    + "Location : $location$"; 
    public static void main(String[] args) {
        String pattern = "\\$\\w+\\$";

        Pattern r = Pattern.compile(pattern);

        Matcher m = r.matcher(testString);
        while (m.find( )) {
           System.out.println("Found value: " + m.group(0) );
        }
    }
}