给定表示数学表达式的字符串
(((x + temp) * temp_2) / 2_temp) + x3
我需要提取除数字和运算符之外的所有变量。 只允许使用圆括号。 特别是,可以提取的有效变量是:
x
x23
x_23
2_temp
2temp
2_
temp
temp_2
temp
但不是
2
15
因此,一般来说,任何变量都可以以任何字符开头,但如果它以数字开头,那么它必须包含至少一个字母。
我试过这个正则表达式
matcher=Pattern.compile("([a-zA-Z0-9_]+\\w*?[a-zA-Z0-9_]*\\w*?)").matcher(equation);
但是,例如,提取了15个。
任何人都可以帮助我?
提前致谢
答案 0 :(得分:1)
根据您的描述,您似乎想要提取以字母数字开头的实体,然后提取0个字符。
您可以使用
\b(?!\d+\b)[a-zA-Z0-9]\w*\b
请参阅regex demo
如果您允许这些变量以下划线开头,请使用\b(?!\d+\b)\w+\b
。
这里的要点是(?!\d+\b)
否定前瞻不允许字边界之间的字符串只包含数字。
详细:
\b
- 字边界(?!\d+\b)
- 限制:必须没有1+位后跟一个字边界[a-zA-Z0-9]
- 一个字母数字(在Java中,您也可以使用\p{Alnum}
)\w*
- 0个或更多单词字符\b
- 尾随字边界。在Java中,在定义模式时不要忘记使用双反斜杠:
String pat = "\\b(?!\\d+\\b)[a-zA-Z0-9]\\w*\\b";
答案 1 :(得分:0)
包含至少一个字母的字母数字字符串:
[a-zA-Z0-9_]*[a-zA-Z][a-zA-Z0-9_]*