我有以下清单:
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)']
如果括号和NULL之间的数字可以在不同的位置,您可以使用模式首先获取捕获组中括号之间的值。
然后您可以找到组 1 值中的数字。
\bMDSYS\.SDO_POINT_TYPE\(([^()]+)\)
\bMDSYS\.SDO_POINT_TYPE\(
比赛 MDSYS\.SDO_POINT_TYPE(
([^()]+)
捕获组 1 中括号之间的所有内容\)
比赛结束 )
请注意,在所需的输出中,第二个值缺少最后一位数字。
import re
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)']
op = []
for s in lst:
m = re.search(r"\bMDSYS\.SDO_POINT_TYPE\(([^()]+)\)", s)
if m:
op.append("({})".format(", ".join(re.findall(r"\d+", m.group(1)))))
print(op)
输出
['(9971, 18847)', '(9971, 19188)', '(9972, 18282)', '(9977, 19201)', '(9989, 18635)']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句