使用 re.findall 避免始终为空的正则表达式组
Avoiding an always-empty regex group with re.findall
我有一个字符串列表列表,正在遍历每个列表以搜索正则表达式模式,该模式使用正则表达式组并生成 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')]]
但是,我不想在列表中输出中间组,如您所见,它始终为空,如何修改正则表达式模式或修改我正在使用的内容以确保只有'very good' 和 '+3'(例如在第一场比赛中)显示为元组 ('very good', '+3') 而不是中间空白元组?
即我希望我的输出是:
[[('very good', '+3'), ('good', '+2')]]
您需要修改模式以仅匹配和捕获必要的内容:
(\w+(?:\s+\w+)*)\[([+-]\d)]
参见regex demo。
详情:
(\w+(?:\s+\w+)*)
- 第 1 组:一个或多个单词字符,然后零次或多次出现一个或多个空格和一个或多个单词字符
\[
- 一个 [
字符
([+-]\d)
- 第 2 组:+
或 -
然后是数字
]
- 一个 ]
字符。
我有一个字符串列表列表,正在遍历每个列表以搜索正则表达式模式,该模式使用正则表达式组并生成 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')]]
但是,我不想在列表中输出中间组,如您所见,它始终为空,如何修改正则表达式模式或修改我正在使用的内容以确保只有'very good' 和 '+3'(例如在第一场比赛中)显示为元组 ('very good', '+3') 而不是中间空白元组?
即我希望我的输出是:
[[('very good', '+3'), ('good', '+2')]]
您需要修改模式以仅匹配和捕获必要的内容:
(\w+(?:\s+\w+)*)\[([+-]\d)]
参见regex demo。
详情:
(\w+(?:\s+\w+)*)
- 第 1 组:一个或多个单词字符,然后零次或多次出现一个或多个空格和一个或多个单词字符\[
- 一个[
字符([+-]\d)
- 第 2 组:+
或-
然后是数字]
- 一个]
字符。