Filter phrases based on correspondent POS tags
Hey, 

Here's how i would solve this.
The problem with regex is that you don't have any index so I find it better to convert your inputs into lists of single words/tags by splitting on spaces. Then it is easier to find the pattern in the tag list and get the matching words. 

words = [word for key in key_list for word in key.split()]  
tags = [tag for value in value_list for tag in value.split()]  

pattern = ['JJ', 'JJ', 'NNS']
matches = []

for i in range(len(tags)):
    if tags[i:i+len(pattern)] == pattern:
        matches.append(words[i:i+len(pattern)])

matches = [' '.join(match) for match in matches]
print(matches)

# result : ['partial differential equations', 'partial differential equations']


Also, if I'm not mistaken your pos-tagger marked "differential" as a noun (NN) in "ordinary differential equations". Nltk tagger does the job and it is really fast to implement but it is not perfect. 

You can try using another tagger, I personally use the Stanford one for nlp processing.