re.findall (), чтобы найти все биграммы, содержащие отрицательный термин - PullRequest
1 голос
/ 30 апреля 2019

Мне необходимо использовать функцию re.findall(), чтобы найти все биграммы, которые содержат отрицательный термин («никогда» или «нет») в качестве первого слова в следующем тексте:

Heшутит от шрамов, которые никогда не чувствовали раны.ДЖУЛЬЕТТА появляется выше в окне Но, мягко!какой свет через те окна разбивается?Это восток, а Джульетта - солнце.Встань, ясное солнце, и убей завистливую луну, Который уже болен и бледен от горя, Что ты ее служанка, намного более справедлива, чем она: не будь ее служанкой, так как она завидует;Ее жилетная тряпка только больная и зеленая И никто, кроме дураков, не носит ее;брось это.Это моя леди, о, это моя любовь!О, это она знала!Она говорит, но она ничего не говорит: что из этого?Ее глаз рассуждает;Я отвечу на это.Я слишком смелая, но она говорит не мне: две из самых прекрасных звезд на всем небе, Имея какое-то дело, умоляют ее глаза Мерцать в их сферах, пока они не вернутся.Что, если ее глаза были там, они в ее голове?Яркость ее щеки опозорила бы эти звезды, Как дневной свет лампы;Ее глаза на небесах Пролетят сквозь воздушный поток, настолько яркий, что птицы будут петь и думать, что не ночь.Видишь, как она опирается на свою щеку!О, если бы я был перчаткой на этой руке, чтобы я мог дотронуться до этой щеки!

У меня нет проблем с попыткой найти одно слово, но я не могу найти биграммы.

import re
inp = input("please enter an expression: ")
print (re.findall(r'\b(?:never|not)\b', inp))

['никогда', 'не', 'не', 'нет'

Как мне получить

[«никогда не чувствовал», «не она», «не», «не правильно»]

Ответы [ 2 ]

2 голосов
/ 30 апреля 2019

Если вы хотите также обернуть слово сразу после not или never, вам нужно расширить это регулярное выражение,

\b(?:never|not)\s+[a-zA-Z]+

Здесь \s+ будет соответствовать одному или нескольким пробелам и[a-zA-Z]+ будет соответствовать одному английскому слову, содержащему один или несколько символов.

Regex Demo

Демонстрация кода Python

import re

s = '''He jests at scars that never felt a wound. JULIET appears above at a window But, soft! what light through yonder window breaks? It is the east, and Juliet is the sun. Arise, fair sun, and kill the envious moon, Who is already sick and pale with grief, That thou her maid art far more fair than she: Be not her maid, since she is envious; Her vestal livery is but sick and green And none but fools do wear it; cast it off. It is my lady, O, it is my love! O, that she knew she were! She speaks yet she says nothing: what of that? Her eye discourses; I will answer it. I am too bold, 'tis not to me she speaks: Two of the fairest stars in all the heaven, Having some business, do entreat her eyes To twinkle in their spheres till they return. What if her eyes were there, they in her head? The brightness of her cheek would shame those stars, As daylight doth a lamp; her eyes in heaven Would through the airy region stream so bright That birds would sing and think it were not night. See, how she leans her cheek upon her hand! O, that I were a glove upon that hand, That I might touch that cheek!'''
print(re.findall(r'\b(?:never|not)\s+[a-zA-Z]+', s))

Отпечатки,

['never felt', 'not her', 'not to', 'not night']

Редактировать: Как вы сказали, вы хотите отменить матчи, за которыми следует пробел и a символ, вы можете использовать отрицательный взгляд вперед и расширить текущее регулярное выражение следующим образом:

\b(?:never|not)\s+[a-zA-Z]+\b(?! a\b)

Здесь я использовал \b до отрицательного взгляда, чтобы избежать частичного совпадения слова и \b после a в отрицательном ключе избегает совпадения слов, которые не просто a, но что-то более похожее на add или and и т. Д.

Regex Demo, где совпадения отбрасываются, если за ними следует пробели a символ

0 голосов
/ 30 апреля 2019
x=input()
m = re.findall(r'\b(?:never|not)\b\s+[\w]+', x)
print(m)
# output
['never felt', 'not her', 'not to', 'not night']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...