我有如下所示的Python 字符串

"1234_4534_41247612_2462184_2131_GHI.xlsx"
"1234_4534__sfhaksj_DHJKhd_hJD_41247612_2462184_2131_PQRST.GHI.xlsx"
"12JSAF34_45aAF34__sfhaksj_DHJKhd_hJD_41247612_2f462184_2131_JKLMN.OPQ.xlsx"
"1234_4534__sfhaksj_DHJKhd_hJD_41FA247612_2462184_2131_WXY.TUV.xlsx"

我想做以下几件事

A)提取出现在第一个点前后的字符

B)我想要的关键字总是在最后_个符号之后找到

对于示例:如果您查看第二个输入字符串,我只希望得到PQRST.GHI作为输出.它在最后的_之后,在第一.之前,我们也得到第一.之后的关键字

因此,我try 了下面的方法

for s in strings:
   after_part = (s.split('.')[1])
   before_part = (s.split('.')[0])
   before_part = qnd_part.split('_')[-1]
   expected_keyword = before_part + "." + after_part
   print(expected_keyword)

虽然这很有效,但这绝对不是编写正则表达式的好方法和优雅方式.

有没有其他更好的方式来写这篇文章?

我希望我的输出如下所示.如您所见,我们会在前dot个字符之前和之后获取关键字

GHI
PQRST.GHI
JKLMN.OPQ
WXY.TUV

推荐答案

try (regex101):

import re

strings = [
    "1234_4534_41247612_2462184_2131_ABCDEF.GHI.xlsx",
    "1234_4534__sfhaksj_DHJKhd_hJD_41247612_2462184_2131_PQRST.GHI.xlsx",
    "12JSAF34_45aAF34__sfhaksj_DHJKhd_hJD_41247612_2f462184_2131_JKLMN.OPQ.xlsx",
    "1234_4534__sfhaksj_DHJKhd_hJD_41FA247612_2462184_2131_WXY.TUV.xlsx",
]

pat = re.compile(r"[^.]+_([^.]+\.[^.]+)")

for s in strings:
    print(pat.search(s).group(1))

打印:

ABCDEF.GHI
PQRST.GHI
JKLMN.OPQ
WXY.TUV

Python相关问答推荐

为什么tkinter框架没有被隐藏?

Pandas 都是(),但有一个门槛

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

如果条件不满足,我如何获得掩码的第一个索引并获得None?

改进大型数据集的框架性能

Plotly Dash Creating Interactive Graph下拉列表

如何从列表框中 Select 而不出错?

Polars将相同的自定义函数应用于组中的多个列,

Polars Group by描述扩展

在电影中向西北方向对齐""

从嵌套极轴列的列表中删除元素

jsonschema日期格式

如何在Gekko中处理跨矢量优化

如何在Django模板中显示串行化器错误

极柱内丢失类型信息""

替换包含Python DataFrame中的值的<;

为什么按下按钮后屏幕的 colored颜色 保持不变?

通过对列的其余部分进行采样,在Polars DataFrame中填充_null`?

使用Scikit的ValueError-了解

判断字典中是否有多个值对