【问题标题】:Using Regex to split numbers and expressions使用正则表达式拆分数字和表达式
【发布时间】:2020-01-14 20:58:59
【问题描述】:

我正在做一个项目,我可以接受来自用户的字符串,用户可以在一行中输入负正值。

然后我使用正则表达式将其拆分为空格。我现在需要能够“修复”数组以包含数字和运算符。

  "(?<=[\\(\\)\\+\\-*\\/\\^A-Za-z])|(?=[\\(\\)\\+\\-*\\/\\^A-Za-z])"

例如,用户可以输入 -1 /2 - 1/2

我现在需要像这样的元素 arr[1] = -1 arr[2] = 2(或者 / 也可以)

目前确实如此:

-

1

/

2

-

1

/

2

我开始编写案例,就像 if arr[i].equals("-") 然后也抓住下一个数字。好吧,那是行不通的,因为它们中间可以有 - 。

感谢任何想法。

【问题讨论】:

  • 作业工具错误。

标签: java regex split


【解决方案1】:

我猜可能是一些类似的表达

-?\s*[0-9.]+|([+÷*-])

开始可能没问题,如果之后会进行验证。

不过,您可能在此处尝试完成的工作可能存在一些设计问题。

Demo

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class re{

    public static void main(String[] args){

        final String regex = "-?\\s*[0-9.]+|([+÷*-])";
        final String string = "-1 /2 - 1/2.4\n"
             + "-1 /25 -- 1/23.2\n"
             + "-1 / 29 - 1/212.42\n"
             + "-1 / 2 - -1/2\n"
             + "-1 / 2 * -1/2\n"
             + "-1 / 2 + -1/2\n"
             + "-1 / 2 ÷ -1/2";

        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        final Matcher matcher = pattern.matcher(string);

        while (matcher.find()) {
            System.out.println("Full match: " + matcher.group(0));
            for (int i = 1; i <= matcher.groupCount(); i++) {
                System.out.println("Group " + i + ": " + matcher.group(i));
            }
        }

    }
}

输出

Full match: -1
Group 1: null
Full match: 2
Group 1: null
Full match: - 1
Group 1: null
Full match: 2.4
Group 1: null
Full match: -1
Group 1: null
Full match: 25
Group 1: null
Full match: -
Group 1: -
Full match: - 1
Group 1: null
Full match: 23.2
Group 1: null
Full match: -1
Group 1: null
Full match:  29
Group 1: null
Full match: - 1
Group 1: null
Full match: 212.42
Group 1: null
Full match: -1
Group 1: null
Full match:  2
Group 1: null
Full match: -
Group 1: -
Full match: -1
Group 1: null
Full match: 2
Group 1: null
Full match: -1
Group 1: null
Full match:  2
Group 1: null
Full match: *
Group 1: *
Full match: -1
Group 1: null
Full match: 2
Group 1: null
Full match: -1
Group 1: null
Full match:  2
Group 1: null
Full match: +
Group 1: +
Full match: -1
Group 1: null
Full match: 2
Group 1: null
Full match: -1
Group 1: null
Full match:  2
Group 1: null
Full match: ÷
Group 1: ÷
Full match: -1
Group 1: null
Full match: 2
Group 1: null

如果您想探索/简化/修改表达式,它已经 在右上角的面板上进行了解释 regex101.com。如果你愿意,你 也可以在this link看,怎么搭配 针对一些样本输入。


【讨论】:

  • 为了进一步扩展我的问题,假设我希望能够提取中间的运算符。 (分数排序)-1 / 2 - -1/2 例如应该读作 (-1/2) - (-1/2)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 2012-01-18
  • 2020-03-06
相关资源
最近更新 更多