限制正则​​表达式中的位数

时间:2015-06-11 09:20:10

标签: python regex

我有这样的正则表达式:

'(?:\$|сум)(\040)?(\d+)|(\d+)(\040)?(?:\$|сум)'

它匹配以下字符串:

$23
23$
1000сум
сум1000
сум 1000
1000 сум

我想将此正则表达式中的位数限制为8.

试过这个:

'(?:\$|сум)(\040)?(\d{, 8})|(\d{, 8})(\040)?(?:\$|сум)'

它停止匹配任何东西。

我做错了什么?

6 个答案:

答案 0 :(得分:5)

\d{, 8}

意味着什么。发动机将按字面意思匹配,因此你的正则表达式失败了。

使用

\d{0,8}

{}

内没有空格

答案 1 :(得分:5)

{}有三种形式:

  • {N}一段固定的时间
  • {M,}至少M次
  • {N,M} N次和M次之间。

如果您使用最后一个,则必须使用最低要求。

将正则表达式更改为\d{1,8}以匹配数字的1到8倍

当您使用+时,从1开始,这是{1,}

的快捷方式

答案 2 :(得分:4)

查看regex101.com所说的内容:

enter image description here

您可以使用匹配1到8位数的{1,8}限制量词。我知道你必须至少有1个,因为你的原始正则表达式中有+

^(?:(?:\$|сум)(\040)?(\d{1,8})|(\d{1,8})(\040)?(?:\$|сум))$

请参阅demo

来自regular-expressions.info

  

语法为{min,max},其中min为零或正整数   表示最小匹配数的数字,max是整数   等于或大于min表示最大匹配数。   如果逗号存在但省略max,则最大数量为   比赛是无限的。因此{0,1}?相同,{0,}*相同,   和{1,}+相同。省略逗号和最大值就可以了   引擎完全重复令牌min次。

答案 3 :(得分:3)

尝试指定下限,例如(\d{0,8})

除了一些正则表达式方言在{0,8}构造中逗号后不允许空格。

答案 4 :(得分:1)

您还需要设置下限。

(?:\$|сум)(\040)?(\d{0,8})|(\d{0,8})(\040)?(?:\$|сум)

您可以看到demo here

答案 5 :(得分:1)

同时指定下限

(?:\$|сум)(\040)?(\d{1,8})|(\d{1,8})(\040)?(?:\$|сум)

这样可行。