如何为只包含0-9位数,逗号,点,加号,减号和空格的数字字符串创建正则表达式?

时间:2015-11-08 15:58:53

标签: c# regex numeric

除了空格之外我还有一个很好用的东西,非常好用:

sed -i 's/ \(\w*\) \(\w*\) / \1 \2\1 /1' lig_mod.pdb

但添加空格似乎是一个问题。 我不需要任何有效性检查。

4 个答案:

答案 0 :(得分:0)

这就像我想要的那样(警告:未经测试)

new Regex("[\\d-\\+,\\.\\s+]+");

答案 1 :(得分:0)

您的正则表达式几乎匹配了您不需要的所有内容,因为^ 否定字符类中的符号。它匹配其他数字,逗号,句号,连字符,加号和回车符号。

请注意,回车不是您可以与\s匹配的所有空格。如果您不想匹配换行符,请使用\p{Zs}代替\s

  

如何为只包含0-9位数,逗号,点,加号,减号和空格的数字字符串创建正则表达式?

如果您需要匹配可能为空的完整字符串:

^[0-9,.+\s-]*$

regex demo。如果字符串应包含至少1个符号,请使用^[0-9,.+\s-]+$(注意最后的+量词)。

正则表达式细分:

  • ^ - 字符串的开头
  • [0-9,.+\s-]* - 0个或更多符号......
    • 0-9 - 数字
    • , - 逗号
    • . - 一个点
    • + - 文字加
    • \s - 任何(Unicode,也是)空白
    • - - 字面连字符(减号)。
  • $ - 字符串结束。

在C#中,

var rx = new Regex(@"^[0-9,.+\s-]*$");

在逐字字符串文字中,您不必转义反斜杠,因为它们被视为文字。

如果您计划删除所有符号,以便保留数字,句号,逗号,连字符和加号,只需将其否定并移除锚点:

[^0-9,.+\s-]+

请参阅another regex demo

答案 2 :(得分:0)

在这里添加Regex的替代方法,您也可以使用LINQ

public static bool ContainsOnlyAllowedChars(string str, string charsAllowed = "0123456789,.+- ")
{
    return str.All(c => charsAllowed.Contains(c));
}

用法

string myInput = "4,.";
Console.WriteLine(ContainsOnlyAllowedChars(myInput)); //outputs true

myInput = "a4,.";
Console.WriteLine(ContainsOnlyAllowedChars(myInput)); //outputs false

答案 3 :(得分:0)

解决方案,最终:

private static bool IsTextNumeric(string text)
    {
        Regex regex = new Regex(@"[^0-9-+,.\s]");// regex that matches disallowed text
        return !regex.IsMatch(text);
    }

\s includes \r