regex - 正则表达式获取一组文本
问题描述
我找不到正确的正则表达式:
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']
解决方案
您可以使用带有内联 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
推荐阅读
- amazon-web-services - 使用 Java 从另一个 lambda 异步调用具有不同参数的输入字符串的 lambda 函数
- ios - 单击“返回”按钮后,Google 地图在 iOS Flutter 应用程序中消失
- jboss - java.lang.IllegalArgumentException: XNIO001001: 在配置 JBoss EAP 7.1 客户端时没有找到 XNIO 提供者
- javascript - 用ajax加载主要内容
- kotlin - Kotlin Job.join()
- angular - Zuul 代理、eureka 服务器和 Angular 6
- bash - 如何删除文件中每一行的第一个空格之后的所有内容?
- c# - 递归方法进入死循环
- java - 将 Java RSA 非对称加密转换为 Flutter Dart
- python - 递归错误:尝试从 python 文件中使用 openpyxl 创建独立的可执行文件