我试图在Python中提出一个regexp,它必须匹配任何字符,但避免使用三个或更多连续的逗号或分号.换句话说,只允许最多两个连续的逗号或分号.
所以这就是我现在所拥有的:
^(,|;){,2}([^,;]+(,|;){,2})*$
Run Code Online (Sandbox Code Playgroud)
它似乎按预期工作:
>>> r.match('')
<_sre.SRE_Match object at 0x7f23af8407e8>
>>> r.match('foo,')
<_sre.SRE_Match object at 0x7f23af840750>
>>> r.match('foo, a')
<_sre.SRE_Match object at 0x7f23af8407e8>
>>> r.match('foo, ,')
<_sre.SRE_Match object at 0x7f23af840750>
>>> r.match('foo, ,,a')
<_sre.SRE_Match object at 0x7f23af8407e8>
>>> r.match('foo, ,,,')
>>> r.match('foo, ,,,;')
>>> r.match('foo, ,, ;;')
<_sre.SRE_Match object at 0x7f23af840750>
Run Code Online (Sandbox Code Playgroud)
但是当我开始增加输入文本的长度时,正则表达式似乎需要更多时间来给出响应.
>>> r.match('foo, bar, baz,, foo')
<_sre.SRE_Match object at 0x7f23af8407e8>
>>> r.match('foo, bar, baz,, fooooo, baaaaar')
<_sre.SRE_Match object at 0x7f23af840750>
>>> r.match('foo, bar, baz,, fooooo, baaaaar,')
<_sre.SRE_Match object at …Run Code Online (Sandbox Code Playgroud)