Python 限制正则表达式中的位数
我有这样一个正则表达式:Python 限制正则表达式中的位数,python,regex,Python,Regex,我有这样一个正则表达式: '(?:\$|сум)(\040)?(\d+)|(\d+)(\040)?(?:\$|сум)' 它匹配以下字符串: $23 23$ 1000сум сум1000 сум 1000 1000 сум 我想把这个正则表达式中的位数限制为8 我试过这个: '(?:\$|сум)(\040)?(\d{, 8})|(\d{, 8})(\040)?(?:\$|сум)' 它停止匹配任何东西 我做错了什么?尝试指定下限,如(\d{0,8}) 此外,一些正则表达式方言在{0,8
'(?:\$|сум)(\040)?(\d+)|(\d+)(\040)?(?:\$|сум)'
它匹配以下字符串:
$23
23$
1000сум
сум1000
сум 1000
1000 сум
我想把这个正则表达式中的位数限制为8
我试过这个:
'(?:\$|сум)(\040)?(\d{, 8})|(\d{, 8})(\040)?(?:\$|сум)'
它停止匹配任何东西
我做错了什么?尝试指定下限,如
(\d{0,8})
此外,一些正则表达式方言在
{0,8}
结构中不允许逗号后有空格。您还需要设置一个下限
(?:\$|сум)(\040)?(\d{0,8})|(\d{0,8})(\040)?(?:\$|сум)
你可以看到一个看看上面写着什么:
您可以使用将匹配1到8位数字的{1,8}
限制量词。我看到必须至少有1个,因为您的原始正则表达式中有+
^(?:(?:\$|сум)(\040)?(\d{1,8})|(\d{1,8})(\040)?(?:\$|сум))$
看
从:
语法为{min,max}
,其中min
为零或正整数
表示最小匹配数的数字,max
是一个整数
等于或大于min
,表示最大匹配数。
如果逗号存在,但省略了max
,则
匹配是无限的。所以{0,1}
与?
相同,{0,1}
与*
相同,
而{1,}
与+
相同。省略逗号和max表示
引擎将令牌精确地重复min
次
没有任何意义。引擎将按字面意思匹配它,因此您的正则表达式失败
使用
{}
中没有空格也指定下限
(?:\$\\\\\\\\\\)(\040)?(\d{1,8})(\d{1,8})(\040)?(?:\$\\\\\\\\\\\\\\\\)
这是可行的。代码>{}有三种形式:
固定时间{N}
至少M次{M,}
在N到M次之间李>{N,M}
\d{1,8}
以匹配一个数字的1到8倍
从1开始,因为你正在使用+这是
{1,}
的快捷方式。你试过\d{0,8}
吗?@tobias_k是的,我试过。没有帮助。请看它没有帮助,因为逗号后面有空格。是的,空格是我真正的问题。谢谢你的回答。我在某个地方读到,即使{,8}也可以设置最大值。事实上,我甚至试过{1,8}。我的问题出在{}
里面的一个空格里。谢谢:)我在某个地方读到,甚至{,8}都可以设置最大值。实际上我甚至试过{1,8}。我真正的问题是空格。谢谢你的回答:)事实上,我忘了谈论空白,但正如@vks已经声明的那样,我没有更新:)只是在开始时留下了我的答案,因为你正在使用1+
\d{, 8}
\d{0,8}