首页 > 解决方案 > 如何在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)']

标签: pythonstringlistsubstringextract

解决方案


您可以使用正则表达式:

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']

推荐阅读