Выберите строки по положению слов - PullRequest
1 голос
/ 09 декабря 2011

Для следующего кортежа

mysentence = 'i have a dog and a cat', 'i have a cat and a dog', 'i have a cat', 
             'i have a dog'

Как выбрать только строки «у меня есть кошка», «у меня есть собака», т.е. исключить строки, содержащие слово dog или cat всередина.

Ответы [ 6 ]

4 голосов
/ 09 декабря 2011

Вы можете сделать это с помощью регулярных выражений.Регулярное выражение .+(dog|cat).+ будет соответствовать одному или нескольким символам, за которыми следуют собака или кошка, а затем один или несколько символов.Затем вы можете использовать фильтр, чтобы найти строки, которые не соответствуют этому регулярному выражению:

import re
regex.compile(r'.+(dog|cat).+')
sentence = 'i have a dog and a cat', 'i have a cat and a dog', 'i have a cat', 
           'i have a dog'
filtered_sentence = filter(lambda s: not regex.match(s), sentence)
1 голос
/ 09 декабря 2011

Вы можете использовать регулярное выражение, чтобы соответствовать предложениям, которые вам не нужны.

Мы можем построить шаблон следующим образом:

  • Мы хотим сопоставить собаку или кошку- (dog|cat)
  • , за которым следует пробел, т.е. не в конце строки

Итак, наш код выглядит так:

>>> mysentence = ('i have a dog and a cat', 'i have a cat and a dog', 'i have a cat', 'i have a dog')
>>> import re                                                                   
>>> pattern = re.compile("(dog|cat) ")
>>> [x for x in mysentence if not pattern.search(x)]                            
['i have a cat', 'i have a dog']
0 голосов
/ 09 декабря 2011
for items in mysentence:
    if (items.find("dog")>=0)^(items.find("cat")>=0):
        print(items)

Вам просто нужен оператор xor и функция поиска.Нет необходимости импортировать

0 голосов
/ 09 декабря 2011

Вы можете использовать регулярные выражения или строковые методы.

Я вижу, что другие отвечают с помощью регулярных выражений, поэтому я пробую строковые методы: с string.find() вы получите позицию подстроки в строке.Затем проверьте, находится ли оно в середине предложения.

def filter_function(sentence, words):
    for word in words:
        p = sentence.find(word)
        if p > 0 and p < len(sentence) - len(word):
            return 0
    return 1

for sentence in mysentence:
    print('%s: %d' % (sentence, filter_function(sentence, ['dog', 'cat'])))

Вы также должны определить, что делать, когда в предложении будет только «кошка».

0 голосов
/ 09 декабря 2011

Самое простое, что могло бы сработать:

In [10]: [phrase for phrase in mysentence if not ' and ' in phrase]
Out[10]: ['i have a cat', 'i have a dog']
0 голосов
/ 09 декабря 2011

Если строка должна заканчиваться конкретной фразой, то это сделает работу:

phases = ("I have a cat", "I have a dog")
for sentence in mysentence:
    for phase in phases:
        if sentence.lower().endswith(phase.lower()):
            print(sentence)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...