我需要使用这些数字制作正则表达式:

 "+1", "1.0", "1,233", "1,233,456.34", "-1", ".34", "1,345,234,122,123"

这些无效:

 "++1", "1.0.0", "1,23,3", "+-1233456.34", "002", "1.", "a1", "1,,2", "1 2", "1,2", ",2".

我尝试了这个正则表达式的不同变体:

 "[\\+\\-]?[1-9]{0,3}([\\d]{3}[\\,]{1})?([\\d]{3}[\\,]{1})?([\\d]{3}[\\,]{1})?([\\d]{3}[\\,]{1})?([\\d]{3}[\\,]{1})?([\\.][\\d]*)?"

测试代码:

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

public class REGEX {
private static final String REGEX = "[\\+\\-]?[1-9]{0,3}([\\d]{3}[\\,]{1})?([\\d]{3}[\\,]{1})?([\\d]{3}[\\,]{1})?([\\d]{3}[\\,]{1})?([\\d]{3}[\\,]{1})?([\\.][\\d]*)?";

private static String[] validNumbers = { "+1", "1.0", "1,233",
        "1,233,456.34", "-1", ".34", "1,345,234,122,123" };

private static String[] invalidNumbers = { "++1", "1.0.0", "1,23,3",
        "+-1233456.34", "002", "1.", "a1", "1,,2", "1 2", "1,2", ",2" };

public static void main(String[] args) {
    Pattern pattern = Pattern.compile(REGEX);

    for (String number : validNumbers) {
        Matcher matcher = pattern.matcher(number);
        if (!matcher.matches()) {
            System.out.println("Valid number is detected as invalid: "
                    + number);
        }
    }
    for (String number : invalidNumbers) {
        Matcher matcher = pattern.matcher(number);
        if (matcher.matches()) {
            System.out.println("Invalid number is detected as valid: "
                    + number);
        }
    }
}

}

当控制台为空时,任务完成。 现在我遇到了这样的问题:

有效号码被检测为无效:1,233

有效号码被检测为无效:1,233,456.34

有效号码被检测为无效:1,345,234,122,123

无效的数字被检测为有效:1。

问候。 对不起大尺寸。

更新。 感谢Noob UnChained ,我已经进入了这个正则表达式:

^([\\+\\-]?[1-9]\\d{0,2})*(\\,\\d{3})*([\\.][\\d*])?$

现在问题更少了:

有效号码被检测为无效:1,233,456.34

检测到有效号码无效:.34

更新。

正则表达式:

"([\\+\\-]?[1-9]\\d{0,2})*(\\,\\d{3})*([.][\\d]*)?"

问题:

无效的数字被检测为有效:1。

FINISHED

最终结果是:

"(?!$)[\\+-]?([1-9]\\d{0,2}|0)?(\\,\\d{3})*(\\.\\d+)?"

自上次更新以来的更改是:([。] [\\ d] +)?

加上这个块使得用户输入数字时不可能出现这种情况,然后将点放在后面。

新更新:在最后一个块中添加2“\\”以避免输入逗号或其他符号而不是点。

新更新:感谢user2266098nhahtdh

user2266098将注意力集中在“0.1”号的未知问题上,并显示了向第二个块添加“| 0”的解决方案。 但是他的正则表达式与我的数据的“+”和“ - ”无法正常工作(因为“()”而不是“[]”)。 我不喜欢量词“{0,}”而不是“*”因为它的大小。

nhahtdh将我的注意力集中在空字符串的未知问题上,并用“(?!$)”显示解决方案。

谢谢大家!

更新

这种情况有新的条件:

我需要使用这些数字制作正则表达式:

"+1", "1.0", "1,233", "1,233,456.34", "-1", ".34", "1,345,234,122,123", "0.1"

这些无效:

"++1", "1.0.0", "1,23,3", "+-1233456.34", "002", "1.", "a1", "1,,2", "1 2", "1,2", ",2", "", "0,123"

我仍然无法得到“完美”的regexp =)

"(?!$)[\\+-]?([1-9]\\d{0,2}|0)?(\\,\\d{3})*(\\.\\d+)?"

给出:无效的数字被检测为有效:0,123

===============>>#1 票数:4

FINISHED

最终结果是:

"(?!$)[\\+-]?([1-9]\\d{0,2}|0)?(\\,\\d{3})*(\\.\\d+)?"

自上次更新以来的更改是:([。] [\\ d] +)?

加上这个块使得用户输入数字时不可能出现这种情况,然后将点放在后面。

新更新:在最后一个块中添加2“\\”以避免输入逗号或其他符号而不是点。

新更新:感谢user2266098nhahtdh

user2266098将注意力集中在“0.1”号的未知问题上,并显示了向第二个块添加“| 0”的解决方案。 但是对于我的数据,他的正则表达式与“+”和“ - ”无法正常工作。 我不喜欢量词“{0,}”而不是“*”因为它的大小。

nhahtdh将我的注意力集中在空字符串的未知问题上,并用“(?!$)”显示解决方案。

谢谢大家!

更新

这种情况有新的条件:

我需要使用这些数字制作正则表达式:

"+1", "1.0", "1,233", "1,233,456.34", "-1", ".34", "1,345,234,122,123", "0.1"

这些无效:

"++1", "1.0.0", "1,23,3", "+-1233456.34", "002", "1.", "a1", "1,,2", "1 2", "1,2", ",2", "", "0,123"

我仍然无法得到“完美”的regexp =)

"(?!$)[\\+-]?([1-9]\\d{0,2}|0)?(\\,\\d{3})*(\\.\\d+)?"

给出:无效的数字被检测为有效:0,123

===============>>#2 票数:3

这个适用于我的所有测试数据:

^(\\+|-)?([1-9]\\d{0,2}|0)?(,\\d{3}){0,}(\\.\\d+)?

顺便说一句我希望你也想要0.1匹配,但你的正则表达式不起作用。 我无法发表评论,所以我正在回答这个问题

  ask by Yaroslav Selivanov translate from so

未解决问题?本站智能推荐:

5回复

java的正则表达式验证字符串?

大家好,我想写一个正则表达式来检查一个值是否只有数字而不是0而不是放在第一位。 例如,值10是正确的,但值01是错误的。 到目前为止,我有这个mystr.matches("[123456789]+")
1回复

写入CSV文件时,超过15位的数字将转换为0

我必须准备一个包含数据和逗号的字符串。 然后使用java.util.zip.ZipEntry.将该字符串写入csv文件java.util.zip.ZipEntry. 现在的问题是:对于长度小于或等于15的数字,它可以正常工作。 对于长度超过15位的数字数据,将转换为0。 因此
2回复

Java存储号在Excel中为String

美好的一天, 我有一个Java Web应用程序,允许用户下载csv格式的一些数据。 一切都很好,除非我有数字数据,但以0开头,例如010 。 我希望将010正确存储到csv文件中,但是它将自动更改为10 。 在我的Java代码中,我尝试在数字前添加' ,但是它将存储到'0
2回复

Java-如何创建子字符串,直到到达非数字字符?

标题不言而喻。 我正在尝试创建一个使用基本编码集成多项式函数的计算器,而不仅仅是为我做一个数学运算符:)。 在碰壁之前,我不必走太远,因为我无法找到一种方法:在原始字符串中创建数字的子字符串,直到到达非数字字符为止。 即如果字符串是123x,我想创建一个子字符串123,不带'x'。 这是
1回复

用于数字字符和。&-的正则表达式

我正在使用C#和.NET,并且有一个看起来像这样的正则表达式 那匹配所有非数字字符,但是我不希望它匹配小数点(。)和负号(-)。 我该如何使用正则表达式呢? 因此,我尝试了Chris',并进行了一些调整以使其正常运行: (我有一个名称为“原始”的文本框) This
2回复

正则表达式数字,带长度

如何创建带有小数点分隔符的数字正则表达式,但又限制了长度 我创建这个: 那么1234567890.1234567890是有效的,但使用的是20(+1->小数点分隔符)个字符。 如何限制为10个字符? 有效: 无效: 提前致谢
3回复

正则表达式在JAVA中验证CSV

嗨,我想逐行验证CSV表格。 csv文件包含: - 这是我的代码: - 但我的正则表达式似乎不正确。 任何人都可以帮助我正确的csv正则表达式。 谢谢 。 或者有没有其他方法可以根据除使用正则表达式之外的模式验证我的CSV?
3回复

正则表达式删除井号和双逗号java csv

我正在处理一个CSV文件,该文件在某些​​地方具有多个逗号和井号。 我的问题是关于如何删除多个逗号和井号,同时在字段之间保留单个逗号。 我要做的这项工作的一部分是,仅使用java,而不使用外部库来对csv文件进行排序,并按价格对数组进行排序。 我要输入一个数字作为输入参数,并返回该行数
1回复

用于验证CSV完整性的正则表达式

我正在使用允许输入CSV文件的工作流自动化工具(Java内置)。 CSV将手动创建,并根据填充的列,工作流将执行某些操作。 因此,仅在找不到以下情况时,才需要匹配字符串(一次一个CSV行): 字符串开头的逗号[表示缺少第一个值] 逗号空间逗号[指示缺少中间值] 字符
2回复

使用Java中的正则表达式验证csv文件

文件结构如下: 总是使用引号。 还有一个尾随换行符。 这是我有的: 这不正确匹配。 我正在使用String.matches(regexp);