python - 字符串上的正则表达式,可能以逗号分隔,也可能不以逗号分隔
问题描述
我正在尝试捕获一行可能有也可能没有逗号的字符串(:只会给出 0 或 1 个逗号)。所以数据将如下所示,正则表达式执行将逐行发生。
cake,strawberry
shortbread
english-muffin,blueberry
第一组的期望捕获:
cake
shortbread
english-muffin
最后一组的期望捕获:
strawberry
blueberry
我最初尝试的是,(.*?)(,)?(.*)
但被捕获cake,strawberry
为一组。我也尝试了其他几个,但它或多或少是一样的。我应该把它当作两种不同的模式吗?
解决方案
使用([^,]*)(?:,(.*))?
:
([^,]*)
匹配零个或多个“不是逗号”并捕获它(?:,(.*))?
可选地,匹配一个逗号并捕获它之后的所有内容
注意:(?:)
是一个非捕获组。
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')
推荐阅读
- python-2.7 - 使用 python selenium 在 Firefox 中打开控制台
- arrays - 带有自定义 getter 的 Kotlin 属性数组
- file - 如何计算列中的行数,但在计算数据阶段时排除 NULL 值?
- javascript - 无法解析模块
- selenium - 如何在单页中访问 Bootstrap 下拉菜单中的元素(当单页中有多个 Bootstrap 时)
- c# - Xamarin Forms - 获取天蓝色表的行数
- python - for循环的奇怪行为
- c# - Unity 中的 Vector2 和 Vector3 是什么?
- reactjs - 警告:失败的道具类型:道具“to”在“链接”中标记为必需,但其值为“未定义”
- rest - SOAP 是 API 吗?