我试图从正则表达式的字符串中提取/匹配数据,但我似乎没有得到它。将某些字符匹配到一个字符串中的Python
我wan't从以下字符串中提取的I386(最后之间的文本 - 和.ISO):
/xubuntu/daily/current/lucid-alternate-amd64.iso
:
/xubuntu/daily/current/lucid-alternate-i386.iso
这也应该在的情况下工作给出的结果应该是i386或amd64。
非常感谢您的帮助。
我试图从正则表达式的字符串中提取/匹配数据,但我似乎没有得到它。将某些字符匹配到一个字符串中的Python
我wan't从以下字符串中提取的I386(最后之间的文本 - 和.ISO):
/xubuntu/daily/current/lucid-alternate-amd64.iso
:
/xubuntu/daily/current/lucid-alternate-i386.iso
这也应该在的情况下工作给出的结果应该是i386或amd64。
非常感谢您的帮助。
如果您将使用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'
r"/([^-]*)\.iso/"
您想要的位将在第一个捕获组中。
谢谢!但是不起作用:( – user175259 2010-05-27 22:13:13
你试图使用'match()'还是'search()'?因为这是一种部分匹配模式,所以它应该与'search()'而不是'match()'一起使用。 (因为'match()'试图匹配整个字符串,而不仅仅是一部分) – Amber 2010-05-27 22:30:16
首先,让我们的生活变得更简单,只获取文件名。
>>> os.path.split("/xubuntu/daily/current/lucid-alternate-i386.iso")
('/xubuntu/daily/current', 'lucid-alternate-i386.iso')
现在只需抓住最后一个短划线和'.iso'之间的所有字母。
我仍然面临无法获取所需文本的问题:((我从来没有用过正则表达式) – user175259 2010-05-27 22:15:20
你也可以在此情况下(而不是正则表达式)使用split:
>>> str = "/xubuntu/daily/current/lucid-alternate-i386.iso"
>>> str.split(".iso")[0].split("-")[-1]
'i386'
split
就可以了解有关您的字符串得到了“分裂”元素的列表。然后使用Python的slicing syntax可以找到适当的部分。
真棒!!'谢谢。 – user175259 2010-05-27 22:25:50
'str.rsplit('.iso',1)[0] .rsplit(' - ',1)[ - 1]' – jfs 2010-05-27 22:44:44
'str.rpartition('.iso')[0]。 rpartition(' - ')[ - 1]' – jfs 2010-05-27 22:45:17
该表达式应该没有前导斜线。
import re
line = '/xubuntu/daily/current/lucid-alternate-i386.iso'
rex = re.compile(r"([^-]*)\.iso")
m = rex.search(line)
print m.group(1)
产生 'I386'
reobj = re.compile(r"(\w+)\.iso$")
match = reobj.search(subject)
if match:
result = match.group(1)
else:
result = ""
主题包含文件名和路径。
>>> 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'
你不需要regexs for this http://stackoverflow.com/questions/2925306/python-matching-some-characters-into-a-string/2925399#2925399 – jfs 2010-05-27 22:46:28
我知道,但它被标记为Python和正则表达式 – 2010-05-27 23:03:31