如何在python中匹配字符串后打印所有字符串

时间:2017-06-20 14:30:40

标签: python regex python-2.7

一个。我有一行如下:

HELLO CMD-LINE: hello how are you -color blue how is life going -color red,green life is pretty -color orange,violet,red

湾我想在-color之后打印字符串。

℃。我尝试了以下reg exp方法,

for i in range (len(tar_read_sp)):
print tar_read_sp[i]
wordy = re.findall(r'-color.(\w+)', tar_read_sp[i], re.M|re.I|re.U)
# print "%s"%(wordy.group(0))
if wordy:
    print "Matched"
    print "Full match: %s" % (wordy)
    print "Full match: %s" % (wordy[0])
    # wordy_ls = wordy.group(0).split('=')
    # print wordy_ls[1]
    # break 
else:
    print "Not Matched"

但它只打印字符串之后匹配的第一个单词, ['blue', 'red', 'orange']

℃。但是如何在匹配字符串后打印所有字符串?喜欢 ['blue', 'red', 'green', 'orange', 'violet']并删除重复变量?

请分享您的意见和建议以打印相同的内容?

3 个答案:

答案 0 :(得分:0)

同意depperm:修复你的缩进。

使用他的正则表达式建议并将其与必要的拆分,重复数据删除和重新排序列表相结合:

wordy = re.findall(r'(?:-color.((?:\w+,?)+))', test_string, re.M|re.I|re.U)
wordy = list({new_word for word in wordy for new_word in word.split(',')})[::-1]

这应该给你一个扁平的,独特的列表,就像你要求的那样(至少我假设你的意思是"删除重复变量")。

答案 1 :(得分:0)

我个人的偏好会做这样的事情:

import re

tar_read_sp = "hello how are you -color blue how is life going -color red,green life is pretty -color orange,violet,red"

wordy = re.findall(r'-color.([^\s]+)', tar_read_sp, re.I)

big_list = []
for match in wordy:
    small_list = match.split(',')
    big_list.extend(small_list)

big_set = list(set(big_list))
print (big_set)

我发现这种方法更容易阅读和更新。我们的想法是获得所有这些颜色匹配,建立一个大的列表,并使用设置来重复数据删除。正在使用的正则表达式:

-color ([^\s])+

将在下一个空格中捕获'small_list'颜色。

答案 2 :(得分:0)

我有一个不使用正则表达式的解决方案。

test_string = 'hello how are you -color blue how is life going -color red,green life is pretty -color orange,violet,red'
result = []
for colors in [after_color.split(' ')[1] for after_color in test_string.split('-color')[1:]]:
    result = result+colors.split(',')
print result

结果是: ['蓝色'红色'绿色'橙色'紫罗兰','红色']