使用Python 2.6.6,我试图使用正则表达式来格式化列表中的每个元素。
数组中元素的示例:
test1;apple;-fgnsldfgsbfdgb
test2;watermelon;-iwerunvfgkjsfg
test3;orange;wervxddgjbdhnf
我想对文本进行格式化,以仅获取分号之间的内容;
apple
watermelon
orange
要捕获的正则表达式如下:
(?<=\;)(.*?)(?=\;)
我尝试了以下代码的不同变体:
for member in fruits:
parseFruit = re.compile(member)
member = member.sub( (\.),((?<=\;)(.*?)(?=\;)) )
print("Fruit: ", member)
似乎什么都不起作用...
答案 0 :(得分:2)
import re
s = """test1;apple;-fgnsldfgsbfdgb
test2;watermelon;-iwerunvfgkjsfg
test3;orange;wervxddgjbdhnf"""
fruits = re.findall(r';(.*?);', s)
for fruit in fruits:
print('Fruit: %s' % fruit)
#fruits is ['apple', 'watermelon', 'orange']
输出:
Fruit: apple
Fruit: watermelon
Fruit: orange
答案 1 :(得分:1)
对于示例数据,您可以在没有捕获组的情况下使用搜索来代替第一个子项。
fruits = ['test1;apple;-fgnsldfgsbfdgb',
'test2;watermelon;-iwerunvfgkjsfg',
'test3;orange;wervxddgjbdhnf']
for member in fruits:
print ("Fruit: " + re.search("(?<=;).*?(?=;)", member).group(0))
如果要使用sub,则可以从字符串的开头到;
的第一次出现进行匹配,然后als对其进行匹配。或匹配;
的最后一次出现直到字符串的末尾。然后将其替换为空字符串。
for member in fruits:
print("Fruit: " + re.sub(r'^[^;]+;|;[^;]+$', '', member))
答案 2 :(得分:0)
或者,可以使用split函数来代替正则表达式
FruitList= ['test1;apple;-fgnsldfgsbfdgb', 'test2;watermelon;-iwerunvfgkjsfg', 'test3;orange;wervxddgjbdhnf']
Fruits= [i.split(';')[1::2] for i in FruitList]
[['apple'], ['watermelon'], ['orange']]