如何在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)']
第四只鸟

如果括号和NULL之间的数字可以在不同的位置,您可以使用模式首先获取捕获组中括号之间的值。

然后您可以找到组 1 值中的数字。

\bMDSYS\.SDO_POINT_TYPE\(([^()]+)\)
  • \bMDSYS\.SDO_POINT_TYPE\( 比赛 MDSYS\.SDO_POINT_TYPE(
  • ([^()]+)捕获组 1 中括号之间的所有内容
  • \) 比赛结束 )

查看Python 演示Regex 演示

请注意,在所需的输出中,第二个值缺少最后一位数字。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章