一个。我有一行如下:
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']
并删除重复变量?
请分享您的意见和建议以打印相同的内容?
答案 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
结果是: ['蓝色'红色'绿色'橙色'紫罗兰','红色']