python - 如何在python中提取字符串的一部分?
问题描述
我有以下列表:
lst = ['SDO_GEOMETRY(2001, NULL, MDSYS.SDO_POINT_TYPE(9971, 18847, NULL), NULL, NULL)',
'SDO_GEOMETRY(2001, NULL, MDSYS.SDO_POINT_TYPE(9971, 19188, NULL), NULL, NULL)',
'SDO_GEOMETRY(2001, NULL, MDSYS.SDO_POINT_TYPE(9972, 18282, NULL), NULL, NULL)',
'SDO_GEOMETRY(2001, NULL, MDSYS.SDO_POINT_TYPE(9977, 19201, NULL), NULL, NULL)',
'SDO_GEOMETRY(2001, NULL, MDSYS.SDO_POINT_TYPE(9989, 18635, NULL), NULL, NULL)']
我只想提取包含 MDSYS.SDO_POINT_TYPE 之后括号中数字的字符串。我怎么做?
到目前为止我尝试了什么?
op=[]
for i in lst:
x = (i[46:56])
y = str('('+x+')')
op.append(y)
但是,数字并不总是在 46-56 的位置,我该如何优化呢?
期望的输出:
['(9971, 1884)',
'(9971, 1918)',
'(9972, 1828)',
'(9977, 1920)',
'(9989, 1863)']
解决方案
您可以使用正则表达式:
import re
>>> [re.findall("MDSYS.SDO_POINT_TYPE\((\d+, \d+)", s)[0] for s in lst]
['9971, 18847', '9971, 19188', '9972, 18282', '9977, 19201', '9989, 18635']
推荐阅读
- python-3.x - 熊猫创建列名子集的列表,除了一个
- java - 运算符不存在:记录 = postgres 中不同的字符
- azure-devops - 用于获取任何工作项的 Microsoft.VSTS.Scheduling.OriginalEstimate 值的任何 Azure DevOps API
- flutter - 无法从 VS Code 执行颤振代码到 android 模拟器
- qt - 在 Qt Creator 中找不到 .pro 文件
- vuejs2 - vue中嵌入模板
- swift - 与 AppGroup 共享数据
- flutter - 如何为列表创建添加方法
- 在带有 ChangeNotifier 的 MyList 中?
- xamarin - 所选设备已断开连接,无法再从此机器访问
- oracle - Oracle -- 可以存储值“13:45”的列的数据类型