我要匹配这样的正则表达式
] prima 1 words 2 words
如果不是
] prima 1 words 2 words 3 words
我的审判是这个:
\]\s*prima\s*1([\w\s]+)\s2([\w\s][^3]+)
但是它只匹配我根本不想匹配的部分表达式。我的排除是错误的。怎么做?我需要将其插入re.compile
中,因此它必须是一行。
答案 0 :(得分:1)
此模式将匹配示例数据,但请注意,\w
本身也可以匹配一个数字。
如果要匹配1个或多个空格字符(也可以匹配换行符),则可以使用\s+
代替空格。
^\] prima 1 \w+ 2 \w+$
如果您要匹配] 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+次以匹配空格和不以数字开头的单词$
字符串结尾如果以下单词不能仅由数字组成,则可以使用负号(?!\d+\b)
来仅检查数字
^\] prima 1 (?!\d+\b)\w+(?: (?!\d+\b)\w+)* 2 (?!\d+\b)\w+(?: (?!\d+\b)\w+)*$