在python中搜索字符串中未知大小的多个子字符串

时间:2014-12-17 16:31:46

标签: python regex

我在python中看到了很多RE的东西,但对于确切的情况没什么,我似乎无法得到它。我有一个名称如下所示的文件列表:

summary_Cells_a_01_2_1_45000_it_1.txt
summary_Cells_a_01_2_1_40000_it_2.txt
summary_Cells_bb_01_2_1_36000_it_3.txt

" summary_Cells _"永远存在。然后有一串字母,长度为1,2或3。然后有" _01_2_1 _"总是。然后有一个介于400和45000之间的数字。然后有" "然后是0-9之间的数字,然后是#34; .txt"

我需要提取字母。

我在尝试:

match = re.search('summary_Cells_(\w)_01_2_1_(\w)_it_(\w).txt', filename)

但是没有得到任何匹配的东西。我试图获得这些字母,但后来可能想要它的号码(最后一个号码)或步骤(中间号码)。

有什么想法吗?

由于

5 个答案:

答案 0 :(得分:2)

你错过了重复,即:

re.search('summary_Cells_(\w+)_01_2_1_(\w+)_it_(\w+).txt', filename)

\w只会匹配一个字符
\w+将匹配至少一个
\w*将匹配任意金额(0或更多)

答案 1 :(得分:1)

你几乎在那里你需要做的就是在头衔小组中重复正则表达式

summary_Cells_(\w+)_01_2_1_(\w+)_it_(\w+).txt

使用示例

>>> filename="summary_Cells_a_01_2_1_45000_it_1.txt"
>>> match = re.search(r'summary_Cells_(\w+)_01_2_1_(\w+)_it_(\w+).txt', filename)
>>> match.group()
'summary_Cells_a_01_2_1_45000_it_1.txt'
>>> match.group(0)
'summary_Cells_a_01_2_1_45000_it_1.txt'
>>> match.group(1)
'a'
>>> match.group(2)
'45000'
>>> match.group(3)
'1'

注意

match.group(n)将返回第n个caputre组

捕获的值

答案 2 :(得分:1)

你不需要一个正则表达式,模式没有什么复杂的东西,它不会改变:

s = "summary_Cells_a_01_2_1_45000_it_1.txt"
print(s.split("_")[2])
a
s = "summary_Cells_bb_01_2_1_36000_it_3.txt"
print(s.split("_")[2])
bb

如果你想要两组lettrrs:

s = "summary_Cells_bb_01_2_1_36000_it_3.txt"
spl = s.split("_")
a,b = spl[2],spl[7]
print(a,b)
('bb', 'it')

答案 3 :(得分:0)

由于你只想在开头捕捉字母,你可以这样做:

re.search('summary_Cells_(\w+)_01_2_1_[0-9]{3,6}_it_[0-9].txt', filename)

这并不会给你提供你不需要的小组。

[0-9]查找一个数字,[0-9]{3,6}允许3到6个数字。

答案 4 :(得分:0)

您正在使用正则表达式,但正如其他人忘记的那样,\w包含字母数字和下划线,因此您应该使用[a-z]代替。

re.search(r"summary_Cells_([a-z]+)_\w+\.txt", filename)

或者,正如Padraic所提到的,你可以使用str.split("_")