首页 > 解决方案 > 正则表达式获取一组文本

问题描述

我找不到正确的正则表达式:

print(re.compile(r'row_([0-9]+)(_[^_]+)*').split('row_0007_id_testa_testb'))
> ['', '0007', '_testb', '']

我尝试使用非贪婪的正则表达式,但也没有用:

print(re.compile(r'row_([0-9]+)(_[^_]+)+?').split('row_0007_id_testa_testb'))
['', '0007', '_id', '_testa_testb']

我需要得到这个:

> ['', '0007', 'id', 'testa', 'testb']

标签: regex

解决方案


您可以使用带有内联 if 条件的简单正则表达式_([^_]+)findall断言该字符串以 开头row_

>>> reg = re.compile(r'_([^_]+)')

>>> s = 'row_0007_id_testa_testb'
>>> print re.findall(reg, s) if s.startswith('row_') else None
['0007', 'id', 'testa', 'testb']

>>> s = 'col_0007_id_testa_testb'
>>> print re.findall(reg, s) if s.startswith('row_') else None
None

推荐阅读