regex 使用re在字符串中查找模式'ds*'

yyhrrdl8  于 12个月前  发布在  其他
关注(0)|答案(5)|浏览(137)

我有多个以ds开头的字符串。
对于例如。

ds000002_R2.0.2_raw.zip
ds000002_R2.0.3_raw.zip
ds000002_R2.0.4_raw.zip
ds000002_R2.0.5_raw.zip
ds000003_R2.0.0_raw.tgz
ds000003_R2.0.1_raw.tgz
ds002_raw_checksums.txt
ds003_models.tgz
ds113c_R1.0.0_sub-18.tgz
ds113c_R1.0.0_sub-20.tgz
ds113c_R1.0.0_sub-21.tgz
ds113b_raw.tgz

如何只提取ds***前面的数字?
所以理想的输出应该是,000002, 000005, 003, 002, 113b, 113c
编辑:我想得到的字母太后,如果有任何之间的ds和之前_.file_extension

yzckvree

yzckvree1#

试试这个.

(?<=ds)(.*?)(?=[^0-9A-Fa-f])

结果:
https://i.stack.imgur.com/ZIGOO.jpg

iszxjhcz

iszxjhcz2#

你可以在re中尝试ds([0-9A-Za-z]+)findall()函数,因为_.都不属于字符类[0-9A-Za-z],组模式匹配将在_.结束:

import re
re.findall(r'ds([0-9A-Za-z]+)', 'ds000002_R2.0.2_raw.zip')
#['000002']

re.findall(r'ds([0-9A-Za-z]+)', 'ds000002.zip')
#['000002']

re.findall(r'ds([0-9A-Za-z]+)', 'ds113b_raw.tgz')
#['113b']
xcitsw88

xcitsw883#

import re
ptrn = re.compile(r"ds(\d+).*")
ptrn.findall(strn)
avwztpqn

avwztpqn4#

您可以使用(?mi)(?<=^ds)([a-z0-9])+匹配ds后面的任何数字或字母。我假设ds总是在一行的开头,并且你有一个多行字符串要搜索。
请参阅regexideone演示。

import re
str = '''ds000002_R2.0.2_raw.zip
ds000002_R2.0.3_raw.zip
ds000002_R2.0.4_raw.zip
ds000002_R2.0.5_raw.zip
ds000003_R2.0.0_raw.tgz
ds000003_R2.0.1_raw.tgz
ds002_raw_checksums.txt
ds003_models.tgz
ds113c_R1.0.0_sub-18.tgz
ds113c_R1.0.0_sub-20.tgz
ds113c_R1.0.0_sub-21.tgz
ds113b_raw.tgz
ds110.tgz'''
print(re.findall(r'(?mi)(?<=^ds)([a-z0-9]+)', str))

输出['000002', '000002', '000002', '000002', '000003', '000003', '002', '003', '113c', '113c', '113c', '113b', '110']

lztngnrs

lztngnrs5#

试试这个:

(?<=ds)\d+[a-z]?

演示:https://regex101.com/r/sElqQg/2

相关问题