2014-09-05 42 views
1

打印字符串我是一个新手,以python.Consider我有一个列表['python','java','ruby']Python来从子从列表

我有一个文本文件如:

jrubyk 
knwdjavawe 
weqkpythonqwe 
1ruby.e 

预期输出:

ruby 
java 
python 
ruby 

我需要打印列表中隐藏的字符串作为子字符串。 有没有办法获得?

+0

没有,如果你没有数据库或引用,因为你正在给你期望输出的话。如果你这样做,它没有任何意义。你不需要该文件就可以这么做。只是迭代项目并打印它们 – wonderwhy 2014-09-05 16:21:25

+0

@ShashankAgarwal可能他没有做任何事情。无论如何,他试图做的是没有什么用,只能练习编程语言 – wonderwhy 2014-09-05 16:23:27

+0

我已经改变了问题中的示例输入以清楚地说明问题。 – Basilevs 2014-09-06 15:32:47

回答

1

蛮力的方法是:

hidden_strings = ['python','java','ruby'] 
with open('path/to/textfile/as/in/example.txt') as infile: 
    for line in infile: 
     for hidden_string in hidden_strings: 
      if hidden_string in line: 
       print(hidden_string) 
+1

@wonderwhy这个问题非常有意义。他有一个隐藏的单词列表和一个带有隐藏单词的gobble-dee-gook文本文件。他试图将他隐藏的单词从*咳嗽*“加密”文本文件中提取出来。 – 2014-09-05 16:26:21

+0

但是为什么要搜索文件里面的单词,如果你已经有了@AdamSmith? – wonderwhy 2014-09-05 16:34:26

+1

@wonderwhy“为什么”在这里并不是一个真正有效的问题,但好像他从文本文件中拉出了一条消息,而不是列表。 – 2014-09-05 16:35:50

2

我倾向于使用regular expressions当我想从大串剥离某些子。这是一个不雅但可读的方式来做到这一点。

import re 

python_matcher = re.compile('python') 
java_matcher = re.compile('java') 
ruby_matcher = re.compile('ruby') 

hidden_text_list = open('hidden.txt', 'r').readlines() 

for line in hidden_text_list: 
    python_matched = python_matcher.search(line) 
    java_matched = java_matcher.search(line) 
    ruby_matched = ruby_matcher.search(line) 

    if python_matched: 
     print python_matched.group() 
    elif java_matched: 
     print java_matched.group() 
    elif ruby_matched: 
     print ruby_matched.group() 
+3

哦,这很有趣!非常适合长名单,对于隐藏单词的短名单不太好。尝试'all_matcher = re.compile(“|”.join([在隐藏字词中的单词re.escape(word)]))''为textfile中的行:print(“.join(all_matcher.findall(line))) ' – 2014-09-05 16:42:18

+0

我会在这里留下答案,但事后看来我更喜欢你的答案。更简洁。我开始对正则表达式对象产生青蛙,但希望OP能够理解正在发生的事情。不过,我真的很喜欢你的findall方法。 – Aphid 2014-09-05 16:46:29

+0

随意编辑我的替代选项。我甚至没有考虑这里的正则表达式,哎呀! – 2014-09-05 17:10:48