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

Jah*_*nov 7 python regex

我有这样的正则表达式:

'(?:\$|???)(\040)?(\d+)|(\d+)(\040)?(?:\$|???)'
Run Code Online (Sandbox Code Playgroud)

它匹配以下字符串:

$23
23$
1000???
???1000
??? 1000
1000 ???
Run Code Online (Sandbox Code Playgroud)

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

试过这个:

'(?:\$|???)(\040)?(\d{, 8})|(\d{, 8})(\040)?(?:\$|???)'
Run Code Online (Sandbox Code Playgroud)

它停止匹配任何东西.

我究竟做错了什么?

Ten*_*bai 8

{}有三个表格:

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

如果您使用最后一个,则必须使用最小值.

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

从1开始,因为您正在使用+,这是一个快捷方式 {1,}


Wik*_*żew 6

看看regex101.com是怎么说的:

\n\n

在此输入图像描述

\n\n

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

\n\n
^(?:(?:\\$|\xd1\x81\xd1\x83\xd0\xbc)(\\040)?(\\d{1,8})|(\\d{1,8})(\\040)?(?:\\$|\xd1\x81\xd1\x83\xd0\xbc))$\n
Run Code Online (Sandbox Code Playgroud)\n\n

查看演示

\n\n

来自正则表达式.info

\n\n
\n

语法为{min,max},其中min是零或正整数\n 数字,表示最小匹配数,max是等于或大于的整数\nmin表示最大匹配数。\n 如果逗号存在但max被省略,匹配的最大数量\n 是无限的。所以{0,1}与 相同?{0,}与 相同*,\n{1,}与 相同+。省略逗号和 max 会告知\n 引擎精确重复令牌min次数。

\n
\n


vks*_*vks 6

\d{, 8}
Run Code Online (Sandbox Code Playgroud)

什么都没有.Engine会字面上匹配,所以你的正则表达式失败了.

使用

\d{0,8}
Run Code Online (Sandbox Code Playgroud)

里面没有空格 {}