Python使用正则表达式格式化数组中的元素

时间:2018-07-10 15:34:06

标签: python arrays regex scripting

使用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)

似乎什么都不起作用...

3 个答案:

答案 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))

Demo

如果要使用sub,则可以从字符串的开头到;的第一次出现进行匹配,然后als对其进行匹配。或匹配;的最后一次出现直到字符串的末尾。然后将其替换为空字符串。

^[^;]+;|;[^;]+$

for member in fruits:
    print("Fruit: " + re.sub(r'^[^;]+;|;[^;]+$', '', member))

Demo

答案 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']]