有没有办法可以在Python中使用正则表达式在字符串中搜索2个或更多单词。
例如,如果我有这样的字符串列表:
[red_house, red_door, red_seat, green_door, green_house, green_table]
...我想特别返回red_house,我可以这样做:
red_house = [obj for obj in list if re.search("red", obj) and re.search("house", obj)]
但是可以将这两个re.search组合成1吗?
干杯,
答案 0 :(得分:1)
re.search("red.*house",my_String)
如果你知道它将以这种方式订购......
如果你知道它会有单词,但它可能是" house_red"或者代替" red_house",这可能有效
if set(re.findall("[a-zA-z]+",my_string)).intersection(["red","house"]) == set(["house","red"]) :
#do something
因为集合是无序的,所以你只是寻找与所有单词的交集
答案 1 :(得分:1)
我会这样做(如果只有两个单词必须匹配):
l = "red_house red_door red_seat green_door green_house green_table house-red".split()
filter(lambda s: re.search('(red.*house)|(house.*red)', s), l)
Out [7]:['red_house']
答案 2 :(得分:0)
您可以使用预测来获得更通用的AND运算符(Regular Expressions: Is there an AND operator?)。
但是使用两个单独的搜索和python and
来组合它们更清晰,更简单。