2010-05-27 218 views
0

我试图从正则表达式的字符串中提取/匹配数据,但我似乎没有得到它。将某些字符匹配到一个字符串中的Python

我wan't从以下字符串中提取的I386(最后之间的文本 - 和.ISO):

/xubuntu/daily/current/lucid-alternate-amd64.iso 

/xubuntu/daily/current/lucid-alternate-i386.iso 

这也应该在的情况下工作给出的结果应该是i386或amd64。

非常感谢您的帮助。

回答

1

如果您将使用re.compile()匹配其中几个这些行并保存生成的正则表达式对象以供重用is more efficient

s1 = "/xubuntu/daily/current/lucid-alternate-i386.iso" 
s2 = "/xubuntu/daily/current/lucid-alternate-amd64.iso" 

pattern = re.compile(r'^.+-(.+)\..+$') 

m = pattern.match(s1) 
m.group(1) 
'i386' 

m = pattern.match(s2) 
m.group(1) 
'amd64' 
+0

你不需要regexs for this http://stackoverflow.com/questions/2925306/python-matching-some-characters-into-a-string/2925399#2925399 – jfs 2010-05-27 22:46:28

+0

我知道,但它被标记为Python和正则表达式 – 2010-05-27 23:03:31

1
r"/([^-]*)\.iso/" 

您想要的位将在第一个捕获组中。

+0

谢谢!但是不起作用:( – user175259 2010-05-27 22:13:13

+0

你试图使用'match()'还是'search()'?因为这是一种部分匹配模式,所以它应该与'search()'而不是'match()'一起使用。 (因为'match()'试图匹配整个字符串,而不仅仅是一部分) – Amber 2010-05-27 22:30:16

1

首先,让我们的生活变得更简单,只获取文件名。

>>> os.path.split("/xubuntu/daily/current/lucid-alternate-i386.iso") 
('/xubuntu/daily/current', 'lucid-alternate-i386.iso') 

现在只需抓住最后一个短划线和'.iso'之间的所有字母。

+0

我仍然面临无法获取所需文本的问题:((我从来没有用过正则表达式) – user175259 2010-05-27 22:15:20

3

你也可以在此情况下(而不是正则表达式)使用split

>>> str = "/xubuntu/daily/current/lucid-alternate-i386.iso" 
>>> str.split(".iso")[0].split("-")[-1] 
'i386' 

split就可以了解有关您的字符串得到了“分裂”元素的列表。然后使用Python的slicing syntax可以找到适当的部分。

+0

真棒!!'谢谢。 – user175259 2010-05-27 22:25:50

+0

'str.rsplit('.iso',1)[0] .rsplit(' - ',1)[ - 1]' – jfs 2010-05-27 22:44:44

+0

'str.rpartition('.iso')[0]。 rpartition(' - ')[ - 1]' – jfs 2010-05-27 22:45:17

0

该表达式应该没有前导斜线。

import re 

line = '/xubuntu/daily/current/lucid-alternate-i386.iso' 
rex = re.compile(r"([^-]*)\.iso") 
m = rex.search(line) 
print m.group(1) 

产生 'I386'

0
reobj = re.compile(r"(\w+)\.iso$") 
match = reobj.search(subject) 
if match: 
    result = match.group(1) 
else: 
    result = "" 

主题包含文件名和路径。

0
>>> import os 
>>> path = "/xubuntu/daily/current/lucid-alternate-i386.iso" 
>>> file, ext = os.path.splitext(os.path.split(path)[1]) 
>>> processor = file[file.rfind("-") + 1:] 
>>> processor 
'i386' 
相关问题