我有一个字符串列表列表,并且正在遍历每个列表以搜索正则表达式模式,该模式使用正则表达式组并产生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.