Как получить строку в одинарных кавычках, но игнорировать "'s" и "' t"? - PullRequest
2 голосов
/ 28 апреля 2019

Я хочу получить строку в одинарных кавычках, например, в предложении:

Play 'My lady's on fire' by Ty Segall

Я хочу получить:

My lady's on fire

Я хочу игнорировать слова с 's и 't, такие как "не" и "леди":

Я пробовал это:

re.findall(r"\s\'.*?\'", user_input)

Но я получаю:

[ 'My lady']

Я хочу получить:

[My lady's on fire]

Ответы [ 3 ]

3 голосов
/ 28 апреля 2019

\B'(?:[^']*(?:'\b)?)+'

\B assert position where \b does not match
' matches the character ' literally (case sensitive)
Non-capturing group (?:[^']*(?:'\b)?)+
+ Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)
Match a single character not present in the list below [^']*
* Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy)
' matches the character ' literally (case sensitive)
Non-capturing group (?:'\b)?
? Quantifier — Matches between zero and one times, as many times as possible, giving back as needed (greedy)
' matches the character ' literally (case sensitive)
\b assert position at a word boundary: (^\w|\w$|\W\w|\w\W)
' matches the character ' literally (case sensitive)
1 голос
/ 28 апреля 2019

Вы можете использовать это регулярное выражение ---> \b\s'(.*?)(?=\'\s|\'$) Вы можете проверить это на https://pythex.org/

Код Python:

import re user_input = "Play 'My lady's on fire' by Nipsey Hussle Play 'My lady's on fire'" print(re.findall(r"\b\s'(.*?)(?=\'\s|\'$)",user_input))

0 голосов
/ 28 апреля 2019

В соответствии с вашими требованиями, есть одна альтернатива (вероятно, не самая производительная):

\'(?:(?!\'[^st]).)*\'

По сути вы берете символы, пока не найдете последовательность, начинающуюся с ', за которой не следует s или t .

Если вам вместо этого нужен более общий случай, когда вы рассматриваете границу слова, тогда посмотрите на другие ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...