我正在构建一个小型Java库,它必须匹配字符串中的单元。例如,如果我有“300000000 m / s ^ 2”,我希望它与“m”和“s ^ 2”匹配。
到目前为止,我已经尝试了大多数可以想象的(由我)配置(我希望这是一个好的开始)
"[[a-zA-Z]+[\\^[\\-]?[0-9]+]?]+"
为了澄清,我需要一些与letters[^[-]numbers]
匹配的东西(其中[]表示非强制性部分)。这意味着:字母,可能后跟一个可能为负的指数。
我已经研究过正则表达式了,但我真的不能流利,所以任何帮助都会非常感激!
非常感谢,
修改 我刚刚尝试了前3个回复
String regex1 = "([a-zA-Z]+)(?:\\^(-?\\d+))?";
String regex2 = "[a-zA-Z]+(\\^-?[0-9]+)?";
String regex3 = "[a-zA-Z]+(?:\\^-?[0-9]+)?";
它不起作用......我知道测试模式的代码是有效的,因为如果我尝试一些简单的东西,比如匹配“12345”中的“[0-9] +”,它将匹配整个字符串。所以,我没有得到什么仍然是错的。我正在尝试在需要的地方更改括号括号...
用于测试的代码:
public static void main(String[] args) {
String input = "30000 m/s^2";
// String input = "35345";
String regex1 = "([a-zA-Z]+)(?:\\^(-?\\d+))?";
String regex2 = "[a-zA-Z]+(\\^-?[0-9]+)?";
String regex3 = "[a-zA-Z]+(?:\\^-?[0-9]+)?";
String regex10 = "[0-9]+";
String regex = "([a-zA-Z]+)(?:\\^\\-?[0-9]+)?";
Pattern pattern = Pattern.compile(regex3);
Matcher matcher = pattern.matcher(input);
if (matcher.matches()) {
System.out.println("MATCHES");
do {
int start = matcher.start();
int end = matcher.end();
// System.out.println(start + " " + end);
System.out.println(input.substring(start, end));
} while (matcher.find());
}
}
答案 0 :(得分:2)
([a-zA-Z]+)(?:\^(-?\d+))?
如果您匹配单个字符,则无需使用字符类[
... ]
。 (
... )
这里是一个捕获括号,供您稍后提取单位和指数。 (?:
... )
是非捕获分组。
答案 1 :(得分:0)
您混合使用方括号来表示字符类和花括号来分组。试试这个:
[a-zA-Z]+(\^-?[0-9]+)?
在许多正则表达式方言中,您可以使用\ d表示任何数字而不是[0-9]。
答案 2 :(得分:0)
尝试
"[a-zA-Z]+(?:\\^-?[0-9]+)?"