Python регулярное выражение: апострофы, только если они заключены в буквы, а не в кавычки - PullRequest
0 голосов
/ 18 февраля 2020

определяют каждое слово как самую длинную непрерывную последовательность букв алфавита c символов (или только букв), включая до одного апострофа, если этот апостроф расположен между двумя буквами.

[a-z]+[a-z/'?a-z]*[a-z$]

Не соответствует букве «а».

Ответы [ 3 ]

0 голосов
/ 18 февраля 2020

Я бы использовал:

^(?:[a-z]+|[a-z]+'[a-z]+)$

с re.IGNORECASE

Демонстрация и объяснение

0 голосов
/ 18 февраля 2020

Вы, похоже, неправильно поняли нотацию класса персонажа. От [ до ] - это список символов, которые нужно сопоставить. Нет смысла перечислять один и тот же символ несколько раз, и в основном все символы, кроме ] и - (и начальные ^ для отрицания), просто совпадают, то есть теряют свое специальное значение регулярного выражения.

Давайте перефразируем ваше требование. Вы хотите, чтобы алфавит c [a-z] повторялся один или несколько раз +, за которым может следовать апостроф и другая последовательность алфавитов.

[a-z]+('[a-z]+)?

В некоторых диалектах регулярных выражений вы можете предпочесть не- захватывая открывающую скобку (?: вместо простой (.

0 голосов
/ 18 февраля 2020

Примерно так должно работать

[a-zA-Z]*(?:[a-zA-Z]\'[a-zA-Z]|[a-zA-Z])[a-zA-Z]*

Совпадение 0 или более букв [a-zA-Z]*?, за которыми следует апостроф, окруженный 2 буквами или одна буква (?:[a-zA-Z]\'[a-zA-Z]|[a-zA-Z]), затем совпадение 0 или больше букв [a-zA-Z]*

Для строчных букв

[a-z]*(?:[a-z]\'[a-z]|[a-z])[a-z]*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...