我将处理一堆具有以下格式的字符串:
"2*salary"
"salary+2"
"2*salary/3"
我的目标是拔出“薪水”。然而,我不想消除非字符,因为我可能有类似“2 * id3”的东西,字符和数字的混合作为变量名称(注意:它永远不会是所有数字)。我目前使用:
Pattern pattern = Pattern.compile("[\\w_]+");
然而,对于像“2 *薪水”这样的事情,这会导致找到“2”和“薪水”。
答案 0 :(得分:3)
你可能正在寻找这个:
Pattern.compile("[a-zA-Z]\\w+");
...换句话说,将开始的字符序列与字母匹配。那将匹配'薪水',但不会匹配'2'(和'2薪水')。
如果您确实需要匹配2salary
,请使用此项:
Pattern.compile("[0-9]*[A-Za-z]\\w+");
(我已将[\w_]
替换为\w
,它实际上包含下划线。
答案 1 :(得分:0)
那是因为2 * salary匹配你的“word”字符定义\ w的两倍,即[a-zA-Z0-9_],第一个是2,而且匹配是工资
在你的情况下你需要像“[a-zA-Z] [\ w] *”
这样的东西