(); Pattern p = Pattern.compile("(\\d+(\\.\\d+-6ren">
gpt4 book ai didi

java - 正则表达式用于分割每个字符,但将数字和小数保留在一起

转载 作者:行者123 更新时间:2023-12-02 03:48:12 25 4
gpt4 key购买 nike

我之前问过一个非常类似的问题并实现了这个正则表达式:"(?<!^)(?=\\D)|(?<=\\D)"分割String像这样:

String input = "x^(24-3x)";
String[] signs = input.split("regex here");
for (int i = 0; i < signs.length; i++) {
System.out.println(signs[i]); }

输出结果为: "x", "^", "(", "24", "-", "3", "x", ")"

现在我需要在相同的条件下拆分字符串,但还要将十进制数字保留在一起。ATM,输入如 (0.5)结果是:"(", "0", ".", "5", ")"但我需要十进制数字保持分组为一个 string例如:"(", "0.5", ")" 。谢谢

最佳答案

您可以很容易地定义一个匹配多个不同标记的正则表达式,而不是在标记之间进行拆分,例如[0-9]+|[a-z]+|[()^*/+-] ,即一个或多个数字一个以上字母任何单个特殊字符。在实践中,这可能需要更多的阐述,例如考虑小数:

List<String> tokens = new ArrayList<>();
Pattern p = Pattern.compile("(\\d+(\\.\\d+)?)|[a-zA-Z]+|[()^*/+-]");
Matcher m = p.matcher("exp(42) * x^(24-3x) - 3.14");
while (m.find()) {
tokens.add(m.group());
}

tokens 的结果是 [exp, (, 42, ), *, x, ^, (, 24, -, 3, x, ), -, 3.14]

仔细看看正则表达式的组成部分:

  • (\\d+(\\.\\d+)?)一些数字,可选地后跟一个点和更多数字。如果您还想允许诸如 .1 之类的数字或42.你需要稍微改变一下。
  • [a-zA-Z]+一个或多个字母;如果你想允许变量带有下划线或数字,例如 var_23 ,您可以将其扩展为类似 ([a-zA-Z_]\w+) 的内容(未测试)
  • [()^*/+-]单个特殊字符,例如运算符或括号。请注意 -最后出现,因此它不会被解释为范围。如果您还有多字符运算符,例如 !=<= ,您可以将其更改为另一个析取: +|-|==|<=|...

关于java - 正则表达式用于分割每个字符,但将数字和小数保留在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36139360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com