匹配空字符串或10位数字的正则表达式

8

首先:我刚开始接触正则表达式,理解起来非常困难。提前告诉您。

为了一个项目,我正在尝试开发一个正则表达式,可以匹配 A) 空字符串(在 C# 中表示为 ""),或者 B) 十个数字。我已经能够解决匹配十个数字的部分:

"^[0-9X]{10}$"

...但不包括“空字符串或”的部分。我想这部分的翻译应该是:

"^[]$|^[0-9X]{10}$"

显然,那样做是行不通的,但我不知道如何编写一些实际可行的东西,尽管有相当多的相关主题。
问题:
A)什么是正则表达式,如果给定的字符串为string.Empty(更确切地说是"")或正好有10个数字,则返回true?
B)请解释一下它是如何工作的。并不是我没有尝试学习(我确实发现“^$”是用于精确字符串匹配的锚点,而“|”是OR运算符...),只是正则表达式显然不是我的强项...然而,我必须使用它们。
4个回答

25
(^$)|(^\d{10}$)

第一个选项匹配空字符串,第二个选项匹配10个数字。

我不知道你的X是什么,除非你正在寻找一个十六进制字符串,如果是这样,你需要执行以下操作:

(^$)|(^[0-9a-fA-FxX]{10}$)

不知道X代表什么 - 我以为它是一些可变长度属性,比如[charactersX]{quantity} - 谢谢你澄清了这个问题! - Andrew Gray

3
^$|^[0-9X]{10}$

^表示匹配开头,$表示只有开头和结尾没有任何内容时才匹配空字符。如果中间有任何内容,就不会匹配。

|是替换操作符,用于替代多个备选字符。


顺便说一下,不知道为什么你的字符类中有一个X?也许你需要匹配“19X56”? - Vorsprung
似乎OP也希望匹配十六进制数字?例如0x123abc - Ja͢ck
不是十六进制数字,最初复制了一个带有[0-9X]组件的示例。这涉及美国电话号码...我对此很好奇。 - Andrew Gray

1
 string a = "0123456789";
 string b = "";
 string reg = @"^(|\d{10})$";

 if ( Regex.IsMatch( a, reg ) && Regex.IsMatch( b, reg ) ) {
     Console.WriteLine( "Matched" );
 }

\d 相当于 [0-9]
{10} 表示恰好是十次
| 是或运算符
^ 表示开头,$ 表示结尾
括号将或操作限制在开始和结束之间的零个或十个数字。


0

尝试以下正则表达式...它会起作用的...

        if (Regex.IsMatch(textBox1.Text, @"^(?!\s*$).+")) //Check Not Empty String 
        {
            if (Regex.IsMatch(textBox1.Text, @"^\d{10}$")) // Check ten digits - Not allowed Alphanumeric
            {
                MessageBox.Show("find Ten digits");
            }
            else
            {
                    MessageBox.Show("Error");
            }
        }
        else
        {
            MessageBox.Show("Empty String Found");
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接