我遇到像这样的正则表达式的问题:
^[0-9\s{0,1}]{4,}$
我希望匹配数字可以设置为不同的重复时间然后是空格字符 以某种方式,[]括号之间的整个表达式可以重复至少四次,但是可以在表达式中的任何位置的空白空间可以重复零次或一次。 我检查了整个正则表达式语言 - C#的快速参考,没有找到。 请帮忙,
提前感谢!
答案 0 :(得分:4)
我这样做:
^(?=\d*\s?\d*$)(\d\s?){4,}$
<强>解释强>
The regular expression:
(?-imsx:^(?=\d*\s?\d*$)(\d\s?){4,}$)
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
^ the beginning of the string
----------------------------------------------------------------------
(?= look ahead to see if there is:
----------------------------------------------------------------------
\d* digits (0-9) (0 or more times (matching
the most amount possible))
----------------------------------------------------------------------
\s? whitespace (\n, \r, \t, \f, and " ")
(optional (matching the most amount
possible))
----------------------------------------------------------------------
\d* digits (0-9) (0 or more times (matching
the most amount possible))
----------------------------------------------------------------------
$ before an optional \n, and the end of
the string
----------------------------------------------------------------------
) end of look-ahead
----------------------------------------------------------------------
( group and capture to \1 (at least 4 times
(matching the most amount possible)):
----------------------------------------------------------------------
\d digits (0-9)
----------------------------------------------------------------------
\s? whitespace (\n, \r, \t, \f, and " ")
(optional (matching the most amount
possible))
----------------------------------------------------------------------
){4,} end of \1 (NOTE: because you are using a
quantifier on this capture, only the LAST
repetition of the captured pattern will be
stored in \1)
----------------------------------------------------------------------
$ before an optional \n, and the end of the
string
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
答案 1 :(得分:2)
您的模式无效:
^[0-9\s{0,1}]{4,}$
这是使用方括号的定义
示例:
[\w'-]
- 匹配任何单词字符,单引号或连字符,仅表示其中一个
并添加{4,}
后,重复四次或更多次,所以基本上你重复匹配一个数字或空白四次或更多次,这可能不是你看的对
如果您需要帮助制作模式,请向我提供样本输入和预期结果,我会尽力帮助您。
现在我想出了以下模式。
<强>模式强>
^(\d{4,})$|^(\s\d{3,})$|^(\d{3,}\s)$|^(\d{2,}\s\d+?)$|^(\d+?\s\d{2,})$
它捕获任意数量的数字,后跟一个空格/前面有空格或任意数字的数字,用一个空格分隔。
答案 2 :(得分:2)
字符类中的量化器没有意义。因为它将字面上匹配以下字符{},01
。
诀窍是使用前瞻性的一些替代:
^ # Begin of string
(?: # Non-capturing group
[0-9]{4,} # Case when there is no white-space
| # Or
(?=[0-9]*\s[0-9]*$)[0-9\s]{5,} # Case when there is one white-space
) # End of non-capturing group
$ # End of string
第一个表达式很容易理解,让我们解释第二个表达式:
(?=[0-9]*\s[0-9]*$)
:确保只有数字且只有一个空格[0-9\s]{5,}
:将数字和空格匹配5次或更多次。我选择了5次,因为OP希望匹配至少4位和可选的一个空格。所以在这种情况下,如果有空格,我们至少会有5个字符。如果没有空格,正则表达式的第一部分就会处理它。