我将处理一堆格式如下的字符串:
"2*salary"
"salary+2"
"2*salary/3"
我的目标是只提取“薪水”。但是,我不想消除非字符,因为我可能有类似“2*id3”的东西,混合了字符和数字作为变量名(注意:它永远不会全是数字)。我目前使用:
Pattern pattern = Pattern.compile("[\\w_]+");
但是,对于像“2*salary”这样的东西,这会导致找到“2”和“salary”。
你可能正在寻找这个:
Pattern.compile("[a-zA-Z]\\w+");
...换句话说,匹配以字母开头的字符序列。这将匹配 'salary',但不会匹配 '2'(和 '2salary' 也一样)。
如果您确实需要 match 2salary
,请使用:
Pattern.compile("[0-9]*[A-Za-z]\\w+");
(我已经替换[\w_]
为 just \w
,它实际上包括下划线)。
这是因为 2*salary 匹配你的“单词”字符定义 \w 的两倍,即 [a-zA-Z0-9_],第一个是 2,and 匹配的是薪水
在您的情况下,您需要类似 "[a-zA-Z][\w]*"