Java,提取$符号之间的单词

时间:2012-11-01 09:56:59

标签: java regex parsing

使用Java,我想提取dollarign符号$之间的单词。

例如:

String = " this is first attribute $color$. this is the second attribute $size$"

我想提取字符串:colorsize并将它们放入列表中。

我试过了:

Pattern pattern = Pattern.compile("(\\$) .* (\\$)");
Matcher matcher = pattern.matcher(sentence);

但是我得到了输出:

"$color$.this is the second attribute $size$"

这样做的最佳方式是什么?

6 个答案:

答案 0 :(得分:2)

.*匹配任何符号的问题。因此,您的模式结果在开始时是正确的,最后是美元符号。

如果您的美元之间的变量只是字母数字,请使用\$\w+\$

答案 1 :(得分:1)

确保该字不包含美元:(\$)[^$]*(\$)

或者,而不是贪婪,使用不情愿的匹配 - 所有(\$) .*? (\$)

答案 2 :(得分:1)

试试这个正则表达式。它应该给出预期的结果。

Pattern pattern = Pattern.compile("\$(.*?)\$");

答案 3 :(得分:1)

问题是你正在使用的正则表达式是贪婪的,并且消耗从字符串中的第一个$开始直到最后$的所有内容。您必须在?之后添加*以使正则表达式不正确:

Pattern pattern = Pattern.compile("\\$(.*?)\\$");
Matcher matcher = pattern.matcher(sentence);
List<String> result = new ArrayList<String>();
for(int i=1; i <= matcher.groupCount(); i++)
    result.add(matcher.group(i);

答案 4 :(得分:1)

你应该在你的模式中使用非贪婪的限定符:

Pattern pattern = Pattern.compile("\\$(.*?)\\$");

注意星号后面的问号。另外,您可以考虑使用+代替*

答案 5 :(得分:1)

使用非贪婪匹配来查找最小匹配,您可以使用组仅提取不带“$”的单词:

"\\$(.*?)\\$"

然后在第一组中找到该词:

matcher.group(1)