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