使用re.findall避免一个总是空的regex组



我有一个字符串列表列表,并且正在遍历每个列表以搜索正则表达式模式,该模式使用正则表达式组并产生3个组,因此输出为3个元组,如下所示:

regex = '((:(?:w+s)+)?w+)[((?:+|-)d)]'

matches = []
for line in sentences:
result = re.findall(regex, str(line))
matches.append(result)

产生以下输出:

[[('very good', '', '+3'), ('good', '', '+2')]]

然而,我不希望中间组在列表中输出,正如你所看到的,它总是空的,我如何修改正则表达式模式或修改我用来确保只有'非常好'和'+3'(例如在第一次匹配中)出现为元组('非常好','+3')而不是中间空白元组?

。我希望我的输出是:

[[('very good', '+3'), ('good', '+2')]]

您需要修改模式以匹配并仅捕获必要的内容:

(w+(?:s+w+)*)[([+-]d)]

参见regex演示。

细节:

  • (w+(?:s+w+)*)-组1:一个或多个字字符,然后零或多次出现一个或多个空格和一个或多个字字符
  • [- a[char
  • ([+-]d)-组2:+-,然后是一个数字
  • ]- a]char.

相关内容

最新更新