从Python字符串中提取特定单词
我知道有很多关于正则表达式的问题,但我想知道从一个字符串中提取特定单词并把它们放到列表里的最佳方法是什么。
假设我的输入是这样的:[A1A B2B, C3C, D4D, E5E],我想从中提取第3个和第4个单词。我的输出应该是一个包含 ['C3C', 'D4D'] 的列表。我该如何使用 findall 来实现这个呢?
注意:上面每个单词之间并不是用逗号分开的。A1A 和 B2B 之间没有逗号。
5 个回答
0
使用 re.findall
方法
s = "[A1A B2B, C3C, D4D, E5E]"
print (re.findall("\w\d\w",s)[2:4])
'C3C', 'D4D']
0
如果你的输入是一个字符串列表,比如说l = ["A1A B2B", "C3C", "D4D", "E5E"]
,那么你需要把列表里的每个字符串分开,变成单独的单词,然后创建一个新的列表`l_new`,这个新列表里的每个元素就是一个单词:
l = ["A1A B2B", "C3C", "D4D", "E5E"]
l_new = sum([x.split() for x in l],[])
l_new[2:4]
或者,如果你的输入实际上是一个字符串,比如说l = '[A1A B2B, C3C, D4D, E5E]'
,那么你可以使用正则表达式。首先去掉方括号和逗号,然后再进行分割:
import re
l_new = re.split(' ',re.sub('[\[\],]','',l))
l_new[2:4]
0
去掉两边的括号,然后把内容分开,去掉逗号,最后取你想要的那部分。
mystr = "[A1A B2B, C3C, D4D, E5E]"
mystr = mystr[1:-1]
thelist = [x.replace(",","") for x in mystr.split()][2:4]
print thelist
0
在你的输入中搜索单词,这听起来不需要用到正则表达式(不过如果你是要找特定结构的值,那就需要了——所以你可能需要更清楚地说明你的输入)。不过,因为你要处理很多可能的分隔符,而不仅仅是空格或逗号,所以使用正则表达式会对你有帮助。
>>> import re
>>> input = "A1A B2B, C3C, D4D, E5E"
>>> input_list = re.findall(r"[\w']+", input)
>>> input_list
['A1A', 'B2B', 'C3C', 'D4D', 'E5E']
接下来,给定你要搜索的单词列表,你可以用集合交集的方法快速找出你需要的内容:
>>> search_terms = ['C3C', 'D4D']
>>> list(set(input_list) and set(search_terms))
['C3C', 'D4D']
如果你只是在特定的位置找单词,可以使用切片(不过我不太明白你具体需要哪种,来自你的问题):
>>> input_list[2:4]
['C3C', 'D4D']
如果你是在寻找符合特定模式或值的内容,那你需要告诉我们你的输入是什么,以及你想找的模式,这样我们才能帮你解决这个问题。
0
把这个字符串变成一个列表,同时去掉里面的 ,
、[
和 ]
这些字符,然后进行切片操作:
>>> s = "[A1A B2B, C3C, D4D, E5E]"
>>> l = [val.strip('[,]') for val in s.split()]
>>> l[2:4]
['C3C', 'D4D']