排除正则表达式中的空格,但键入下划线和连字符

时间:2017-05-18 08:47:46

标签: java regex

我的变量由" $"分隔。并且可以按任何顺序包含点,连字符和下划线但不包含空格。 其实我的正则表达式是:

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

但是,例如,它并不适用于该案例:

  

我松了12美元,但你松了25美元

结果是" $但你松了25 $"。

我也尝试过:

"\\$\\w+\\$"

但现在,它并不适用于连字符

添加更多详情:

我只希望匹配exepression与0或更多点 - 下划线 - 连字符:

  

$ $ test_underscore

     

$测试连字符$

     

$ $测试

     

$ test_test2-TEST3 $

     

$ test.test2-test3 $

如果有像我的第一个例子那样的空白

,则没有任何内容

2 个答案:

答案 0 :(得分:2)

您可以使用与任何字符匹配的否定字符类,但只有空格和美元:

"\\$[^\\s$]+\\$"

此处,\$匹配一个文字美元符号,后面可以跟一个或多个符号,而不是空格和美元符号,后跟另一个美元符号。

要仅在美元之间匹配单词字符,点和连字符,请使用白名单方法:

"\\$[\\w.-]+\\$"

答案 1 :(得分:2)

试试这段代码:

Pattern pattern = Pattern.compile("\\$(\\S*)\\$");
Matcher matcher = pattern.matcher(s);
if (matcher.find())
    System.out.println(matcher.group(1));

\S*表示除空格外的任何内容