Python 正则表达式与介于两者之间的单词匹配为可选



>我有不同的正则表达式模式,里面有很多可选部分,但它不起作用:

import re
s = 'not something useful at all'
p=re.compile(r'not (?:so)? (useful|good|correct)')
if p.search(s) != None:
print(p.search(s).group(0))
else:
print("no match")

因此,如果我执行此操作,我会打印"不匹配",但是如果我将"某物"更改为"所以",那么我会被打印"不太有用","所以"部分是可选的,这意味着如果它不存在,那么"不"和"有用"仍然应该匹配

我需要的另一个模式匹配是这样的:

import re
s = 'not random_text_inbetween useful random_text_inbetween at random_text_inbetween all'
p=re.compile(r'(not|maybe) (?:so)? (useful|good|correct) (?:at)? (?:all)?')
if p.search(s) != None:
print(p.search(s).group(0))
else:
print("no match")

编辑:好的,所以我将在这里改写第二部分的问题:

维克托提供了这个正则表达式(not|maybe)(?:(?: so)?.*?)? (useful|good|correct)(?: at(?: all)?)?

这在此正则表达式 101 网站上标记了以下匹配项:

Match 1
Full match  0-32    `not random_text_inbetween useful`
Group 1.    0-3 `not`
Group 2.    26-32   `useful`

但我还需要的是匹配/组,以防一个或多个可选部分也在字符串中:

"random_text_inbetween random_text_inbetween没用random_text_inbetween">

所以在这个例子中,我想有一个"at"、"all"的组,因为它们出现在上面的文本中。

如果未找到可选部分,则不应返回这些组,而应仅返回与必填词(如"not","有用")的其余匹配项

好的,所以我现在想通了:-)

使用此正则表达式:

(not) (?:[^|]+) (useful) (?:[^|]+) (at)? (?:[^|]+) (all)?

感谢 Wiktor 帮助我并提供这个正则表达式在线网站,这对于快速测试您的正则表达式模式非常有帮助。

相关内容

最新更新