首页 > 解决方案 > 允许在字符串中间输入一些字符

问题描述

我应该在我的正则表达式代码中添加什么表达式以允许字符串中间出现字符“-”?谢谢之前:) 这个正则表达式用于数字输入。

此有效输入样本:1,000,000.0xxx <-- 有效 | -1,000,000.0xxx <-- 有效 | 1.00-2.00 <-- 这次不允许使用下面我当前的正则表达式,这是我想问的。

这个无效输入样本:1.00,00 | -5,000000

这是我当前的正则表达式代码: /^(-?)(\d*(\.\d+)?|-|\.\.\.|(?!0+\.00)(?=.{1,9}(\.|$))(?!0(?!\.))\d{1,3}(-?,\d{3})(,\d{3})*(\.\d+)?)$/

标签: c#regex

解决方案


很难猜测这里可能需要什么,但我猜你想传递十进制数和正十进制范围,这些表达式可能需要研究,也许:

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

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

并且可能会因某些意外情况而失败。

演示


如果您想探索/简化/修改表达式,它已在 regex101.com的右上角面板中进行了说明。如果您愿意,您还可以在此链接中观看它如何与一些示例输入匹配。


测试

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"^(?:-?\d{1,3},?)?(?:\d{3},?)*\.[0-9]{1,2}(?:-(?:\d{1,3},?)?(?:\d{3},?)*\.[0-9]{1,2})?$";
        string input = @"1,000,000.0
-1,000,000.0
100,000,000.0
-1,000,000,000,000.0
1.00-2.00
1.00

1
11
123
0

.00,00
-5,000000";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}

正则表达式电路

jex.im可视化正则表达式:

在此处输入图像描述


推荐阅读