正则表达式不匹配包含特定数字的表达式

时间:2020-05-05 07:08:39

标签: python python-3.x regex

我要匹配这样的正则表达式

] prima 1 words 2 words

如果不是

] prima 1 words 2 words 3 words

我的审判是这个:

\]\s*prima\s*1([\w\s]+)\s2([\w\s][^3]+)

但是它只匹配我根本不想匹配的部分表达式。我的排除是错误的。怎么做?我需要将其插入re.compile中,因此它必须是一行。

1 个答案:

答案 0 :(得分:1)

此模式将匹配示例数据,但请注意,\w本身也可以匹配一个数字。

如果要匹配1个或多个空格字符(也可以匹配换行符),则可以使用\s+代替空格。

^\] prima 1 \w+ 2 \w+$

Regex demo

如果您要匹配] prima,然后匹配1和2,则它们自身可以跟有1个或多个不能以数字开头的单词:

^] prima 1 [^\W\d]\w*(?: [^\W\d]\w*)* 2 [^\W\d]\w*(?: [^\W\d]\w*)*$
  • ^字符串的开头
  • ] prima 1 字面上匹配
  • [^\W\d]\w*匹配char字符不以数字开头的单词
  • (?: [^\W\d]\w*)*重复0+次以匹配空格和不以数字开头的单词
  • 2 字面上匹配
  • [^\W\d]\w*匹配char字符不以数字开头的单词
  • (?: [^\W\d]\w*)*重复0+次以匹配空格和不以数字开头的单词
  • $字符串结尾

Regex demo

如果以下单词不能仅由数字组成,则可以使用负号(?!\d+\b)来仅检查数字

^\] prima 1 (?!\d+\b)\w+(?: (?!\d+\b)\w+)* 2 (?!\d+\b)\w+(?: (?!\d+\b)\w+)*$

Regex demo

相关问题