Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式与包含特定数字的表达式不匹配_Python_Python 3.x_Regex - Fatal编程技术网

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

Python 正则表达式与包含特定数字的表达式不匹配,python,python-3.x,regex,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中,因此它必须是一行。此模式将匹配示例数据,但请注意,\w本身也可以匹配数字 如果要匹配1个或多个空格字符(也可以匹配换行符),可以使用\s+而不是空格

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

] prima 1 words 2 words
如果它是

] prima 1 words 2 words 3 words
我的审判是这样的:

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

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

此模式将匹配示例数据,但请注意,
\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*
    匹配字符不以数字开头的单词
  • (?:[^\W\d]\W*)*
    匹配空格和不以数字开头的单词,重复0多次
  • 2
    逐字匹配
  • [^\W\d]\W*
    匹配字符不以数字开头的单词
  • (?:[^\W\d]\W*)*
    匹配空格和不以数字开头的单词,重复0多次
  • $
    字符串结尾

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

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

你想匹配单词,但不想在单词前面加空格和3时匹配?如果有3,空格和其他单词!它不像“3hello”,而是按顺序“3hello”,可能像
^\](?:(?!3\b)\d+\w+$
或更广泛的版本
^\](?:(?!3\b)\w+$
我想精确匹配“]prima 1个单词2个单词”,如果我插入你的表达式,它也会匹配4个单词5个单词。“words”是指单词,如果你想精确地匹配它的话,
^\]prima 1\w+2\w+$
嘿,这很好,它在regex101上匹配,但是如果我把它放在re.compile中,它就不起作用了。为什么@Anna您是否使用了
re.MULTILINE
like
regex=re.compile(pattern,re.MULTILINE)
查看我正在检查的这个示例,它匹配了6/19个实例:
\]\s*prima\s*1\s*(?!\d+\b)\w+(?:\s(?!\d+\b)\w+\s*2\s(?!\d+\b)\w+(?:(?:(?!\d+\b)\w+\w*)
不,仅此项:
查找FASE123T\s*u=prima\s*(\s*)\w+(?:\s(?!\d+\b)\w+*\s*2\s(?!\d+\b)\w+(?:(?!\d+\b)\w+*$)
我正在进行一些试验,因为它仍然需要19个中的9个,我必须看看有什么不匹配