Чтобы включить одиночную кавычку в класс символов, сбегите с нее \. Регулярное выражение должно быть:
\.\s+[A-Z"\']
Это действительно все, что вам нужно. Вам нужно всего лишь указать регулярное выражение, чтобы совместить, вам не нужно указывать то, что вы не хотите сопоставлять. Все, что не соответствует шаблону, не будет соответствовать.
Это регулярное выражение будет соответствовать любому периоду, за которым следует пробел, за которым следует заглавная буква или цитата. Поскольку период, которому предшествует число и сразу же за которым следует письмо, не соответствует этим критериям, он не будет соответствовать.
Это предполагает, что регулярное выражение, которое у вас было, работало, чтобы разделить период, за которым следует пробел, за которым следует капитал, как вы сказали. Обратите внимание, однако, что это означает, что I am Sam. Sam I am.
разделится на I am Sam
и am I am
. Это действительно то, что вы хотите? Если нет, используйте утверждения с нулевой шириной, чтобы исключить части, которые вы хотите сопоставить, но также сохраняете. Вот ваши варианты, в порядке того, что я думаю, что это, скорее всего, вы хотите.
1) Держите период и первую букву или открытую цитату следующего предложения; потерять пробельные:
(?<=\.)\s+(?=[A-Z"\'])
Это расколоть пример выше в I am Sam.
и Sam I am.
2) Держите первую букву следующего предложения; потерять период и пропуски:
\.\s+(?=[A-Z"\'])
Это разделится на I am Sam
и Sam I am
. Это предполагает, что после этого есть больше предложений, иначе период останется со вторым предложением, потому что за ним не следуют пробелы и заглавная буква или цитата.Если этот параметр - тот, который вы хотите - предложения без периодов, то вы можете также указать период, за которым следует конец строки, с необязательным промежуточным пробелом, так что конечный период и любые конечные пробелы будут отбрасывается:
\.(?:\s+(?=[A-Z"\'])|\s*$)
Обратите внимание на ?:
. Вам нужно, не захваченным, потому что если у вас есть захват группы в расколе, все захвачено группой добавляется в качестве элемента в результатах (например split('(+)', 'a+b+c'
дает массив a
+
b
+
c
, а не только a
b
c
) ,
3) Держите все; пробельный идет с предыдущим предложением:
(?<=\.\s+)(?=[A-Z"\'])
Это даст вам I am Sam.
и Sam I am.
Что касается последней части вашего вопроса, лучший ресурс для регулярных выражений синтаксиса я видел http://www.regular-expressions.info. Начните с этого резюме: http://www.regular-expressions.info/reference.html Затем перейдите на страницу учебного пособия для более подробной информации: http://www.regular-expressions.info/tutorial.html
Два действительно хороших ресурса для регулярных выражений: http://www.regular-expressions.info/tutorial.html и http: // manual. macromates.com/en/regular_expressions – GreatBigBore
Также хорошо: http://www.pyregex.com/ –