>我有不同的正则表达式模式,里面有很多可选部分,但它不起作用:
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 帮助我并提供这个正则表达式在线网站,这对于快速测试您的正则表达式模式非常有帮助。