如何从可能变化的字符串中提取特定字符

时间:2019-03-26 07:30:54

标签: python string

我正在尝试提取文件名的特定部分,该部分可以具有不同数量的“ _”。我以前曾使用partition / rpartition删除下划线之前和之后的所有内容,但我没有考虑使用不同的下划线编号的可能性。

该代码的目的是提取下划线之间的特定字符。

filename = os.path.basename(files).partition('_')[2].rpartition('_')[0].rpartition('_')[0].rpartition('_')[0]

以上是我当前的代码。该文件的典型名称如下:

P0_G12_190325184517_t20190325_5

或者也可以有

P0_G12_190325184517_5

据我了解,当前代码的分区需要与第一个文件的文件下划线的数量匹配,但是相同的代码显然不适用于第二个文件。

我要提取

G12 

这部分也可以只是两个字符,例如G1,因此上述文件名类型中的两个到三个字符。

2 个答案:

答案 0 :(得分:2)

您可以使用:

os.path.basename(files).split('_')[1]

答案 1 :(得分:1)

您可以使用split创建包含单独部分的列表,如下所示:

files.split('_')

或者您可以使用正则表达式:

https://regex101.com/r/jiUNLV/1

并这样做:

import re
pattern = r'.*_(\w{2,3})_\d+.*'

match = re.match(pattern, files)

if match:
    print(match.group(1))