0

我将处理一堆格式如下的字符串:

"2*salary"
"salary+2"
"2*salary/3"

我的目标是只提取“薪水”。但是,我不想消除非字符,因为我可能有类似“2*id3”的东西,混合了字符和数字作为变量名(注意:它永远不会全是数字)。我目前使用:

Pattern pattern = Pattern.compile("[\\w_]+");

但是,对于像“2*salary”这样的东西,这会导致找到“2”和“salary”。

4

2 回答 2

3

你可能正在寻找这个:

Pattern.compile("[a-zA-Z]\\w+");

...换句话说,匹配以字母开头的字符序列。这将匹配 'salary',但不会匹配 '2'(和 '2salary' 也一样)。

如果您确实需要 match 2salary,请使用:

Pattern.compile("[0-9]*[A-Za-z]\\w+");

(我已经替换[\w_]为 just \w,它实际上包括下划线)。

于 2013-09-29T21:32:24.630 回答
0

这是因为 2*salary 匹配你的“单词”字符定义 \w 的两倍,即 [a-zA-Z0-9_],第一个是 2,and 匹配的是薪水

在您的情况下,您需要类似 "[a-zA-Z][\w]*"

于 2013-09-29T21:36:20.970 回答