首页 > 解决方案 > 字符串上的正则表达式,可能以逗号分隔,也可能不以逗号分隔

问题描述

我正在尝试捕获一行可能有也可能没有逗号的字符串(:只会给出 0 或 1 个逗号)。所以数据将如下所示,正则表达式执行将逐行发生。

cake,strawberry
shortbread
english-muffin,blueberry

第一组的期望捕获:

cake
shortbread
english-muffin

最后一组的期望捕获:

strawberry

blueberry

我最初尝试的是,(.*?)(,)?(.*)但被捕获cake,strawberry为一组。我也尝试了其他几个,但它或多或少是一样的。我应该把它当作两种不同的模式吗?

标签: pythonregex

解决方案


使用([^,]*)(?:,(.*))?

  • ([^,]*)匹配零个或多个“不是逗号”并捕获它
  • (?:,(.*))?可选地,匹配一个逗号并捕获它之后的所有内容

注意:(?:)是一个非捕获组。

Python演示:

import re

lines = ['cake,strawberry',
         'shortbread',
         'english-muffin,blueberry']

for line in lines:
    print(re.match('([^,]*)(?:,(.*))?',line).groups())
('cake', 'strawberry')
('shortbread', None)
('english-muffin', 'blueberry')

推荐阅读