Я пытаюсь сопоставить все вопросительные знаки, кроме последнего в предложении. Например:

Вот первое предложение ??

Ожидаемый результат: вот первое предложение?

Вот второе предложение?

Ожидаемый результат: вот второе предложение

Вот третье предложение ???

Ожидаемый результат: вот третье предложение

Я пробовал следующий код, но он не работает.

re.match(r'(.*?)\?', sentence).group()

Любая помощь была бы признательна!

0
Sirui Li 5 Июл 2019 в 10:16

6 ответов

Лучший ответ

Пытаться

  • жадное повторение
  • повторение знака вопроса
  • search с group(1)

Видеть:

In [31]: re.search(r'([^?]*\?*)\?', 'aa???? ').group(1)
Out[31]: 'aa???'

In [32]: re.search(r'([^?]*\?*)\?', 'Here is a sentence ????? ').group(1)
Out[32]: 'Here is a sentence ????'

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

1
mrzasa 5 Июл 2019 в 08:18
(.*?)\?

Проблема в ленивом квантификаторе? который пытается соответствовать как можно меньше, когда вы хотите, чтобы соответствовать как можно больше. Также:

.group()

По умолчанию вернет нулевую группу, что означает полное совпадение. Что вам нужно, это первая группа:

re.match(r'(.*)\?', sentence).group(1)

Подумайте об использовании простого оператора if, если вы просто хотите удалить последний знак вопроса:

if sentence[-1] == '?':
    sentence = sentence[:-1]
0
RafalS 5 Июл 2019 в 07:32

Подход Regex:

import re

s = 'Here is the third sentence???'
res = re.search(r'[^?]+\?*(?=\?)', s).group(0)
print(res)

Выход:

Here is the third sentence??

  • [^?]+ - соответствует любой ожидаемый символ (ы) ?
  • \?* - соответствует нулю или более знаков вопроса. ? символ должен быть экранирован как специальный символ.
  • (?=\?) - положительное прогнозное утверждение: гарантирует, что за частью предложения, предшествующей сопоставлению, следует один ? (знак вопроса)
0
RomanPerekhrest 5 Июл 2019 в 07:44

Используйте re.sub для удаления знака вопроса, за которым не следует знак вопроса:

re.sub(r'\?(?!\?)','',text)
0
kantal 6 Июл 2019 в 08:23

Следующее регулярное выражение будет работать.

. + ( ? = \ ? )

enter image description here

-1
Kang Andrew 5 Июл 2019 в 07:54
results = re.search(r'(\w\?)', str1)
str1[0:results.span()[0]+1] + str1[results.span()[1]:]
0
nag 5 Июл 2019 в 07:51