regex Java中的正则表达式,不能“馈送”编译器右序列[关闭]

kuuvgm7e  于 2023-04-13  发布在  Java
关注(0)|答案(1)|浏览(77)

已关闭,此问题需要更focused,目前不接受回答。
**要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

昨天关门了。
Improve this question
我是一个新的编码以及在正则表达式。我需要验证简单的输入在Java中。它应该比较以下:名称、地址、订单、总金额

  • name -可以包括所有语言和空格的所有文字;
  • 地址-没有限制;
  • order -包含所有语言和数字的所有文字;
  • 总计-仅限数字,格式如下:“xxx.xx”,其中:
  • 点号前的位数没有限制;
  • 点号后的位数限制为2。
  • 重要提示:每个子字符串后面都应该有一个逗号和一个空格,“total sum”除外。

我已经尝试了很多次和许多变体,当然,阅读规范,但它不能正常工作,或者我根本不理解这个主题。
例如,Pattern patternRegexOrder = Pattern.compile("\\D*");接受"Ivan""Иван",但当我添加\\D*,\\D*\\,等时,它既不接受"Ivan,"也不接受"Иван,"
下面是我的代码:

import java.io.IOException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Pizza {

    public static String orderDescription() {

        System.out.println("Input a data about new order in format: \"name, address, order, sum\". Input data should go with commas and spaces.");
        Scanner scan = new Scanner(System.in);
        String record = scan.next();
        validateOrder(record);
        return record;
    }
    public static String validateOrder(String record) {

        Pattern patternRegexOrder = Pattern.compile("(.*), (.*), (.*), (\\d+(?:\\.\\d{0,2})?)");
        Matcher matcherRegexOrder = patternRegexOrder.matcher(record);
        while (matcherRegexOrder.find() == false) {
            System.out.println("Check input data:\n1) All data goes throw comma and space;\n2) Name - only literals;\n3) Address - no limits;\n4) Order - no limits;\n5) Sum - total sum in format \"000.00\"");
            orderDescription();
            }
        if (matcherRegexOrder.find()) {
            System.out.println("The order has been added to queue.");
            orderDescription();
        }
        return record;
    }
    public static void main(String[] args) throws IOException {
        orderDescription();
    }
}
cotxawn7

cotxawn71#

你可以使用类似这样的东西:(.*), (.*), (.*), (\d+(?:\.\d{0,2})?)(它是原始的正则表达式,没有java的双转义)
这里除了“Total sum”之外的每个块都接受任意数字的任意字母。块之间用逗号和空格分隔。最后一个块接受任意数字(〉0),后跟可选的.且不超过2位数字。
注意:由于描述格式的规则非常模糊,,对于文本输入来说并不是一个“好”的分隔符,因此可能会得到意想不到的结果(例如,如果任何字段包含逗号后跟空格)。
如何使用此正则表达式进行验证和提取的示例:

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

public class MyClass {
    public static void main(String args[]) {
        String input = "Ivan Иван, Example of Address, pekrf3423wd4, 123.0";
        System.out.println(input.matches("(.*), (.*), (.*), (\\d+(?:\\.\\d{0,2})?)"));
        
        Pattern pattern = Pattern.compile("(.*), (.*), (.*), (\\d+(?:\\.\\d{0,2})?)");
        Matcher matcher = pattern.matcher(input);
        if (matcher.find())
        {
            System.out.println("Name: " + matcher.group(1));
            System.out.println("Addres: " + matcher.group(2));
            System.out.println("Order: " + matcher.group(3));
            System.out.println("Total: " + matcher.group(4));
        }
    }
}

输出:

true
Name: Ivan Иван
Addres: Example of Address
Order: pekrf3423wd4
Total: 123.0

相关问题