Вы можете использовать ((?:^|\.\s)\s*)([a-z])
regex (, которое не зависит от обходных путей, которые иногда могут быть недоступны на используемом вами диалекте регулярных выражений, и, следовательно, более просты и широко поддерживаются. Как, например, Javascript не делаетвсе же широко поддерживают lookbehind, хотя он поддерживается в EcmaScript2018, но пока еще не широко поддерживается ), где вы фиксируете либо начальный ноль, либо несколько пробелов в начале предложения, или один или несколько пробелов, за которыми следует буквальная точка .
изахватите его в group1 и затем захватите строчную букву, используя ([a-z])
, и захватите в group2 и замените сопоставленный текст захваченным текстом group1 и group2, сделав его заглавным, используя лямбда-выражение.Проверьте этот код Python,
import re
arr = ['here a long. paragraph full of sentences. what in this case does not work. i am lost',
' this para contains more than one space after period and also has unneeded space at the start of string. here a long. paragraph full of sentences. what in this case does not work. i am lost']
for s in arr:
print(re.sub(r'(^\s*|\.\s+)([a-z])', lambda m: m.group(1) + m.group(2).upper(), s))
Output,
Here a long. Paragraph full of sentences. What in this case does not work. I am lost
This para contains more than one space after period and also has unneeded space at the start of string. Here a long. Paragraph full of sentences. What in this case does not work. I am lost
И если вы хотите избавиться от лишних пробелов и уменьшить их до одного пробела, просто возьмите \s*
из группы 1 и используйте это регулярное выражение ((?:^|\.\s))\s*([a-z])
и с обновленным кодом Python,
import re
arr = ['here a long. paragraph full of sentences. what in this case does not work. i am lost',
' this para contains more than one space after period and also has unneeded space at the start of string. here a long. paragraph full of sentences. what in this case does not work. i am lost']
for s in arr:
print(re.sub(r'((?:^|\.\s))\s*([a-z])', lambda m: m.group(1) + m.group(2).upper(), s))
Вы получаете следующее, когда дополнительный пробел сокращается до одного пробела, который часто может быть желательным,
Here a long. Paragraph full of sentences. What in this case does not work. I am lost
This para contains more than one space after period and also has unneeded space at the start of string. Here a long. Paragraph full of sentences. What in this case does not work. I am lost
Кроме того, если бы это было сделано с помощью механизма регулярных выражений PCRE
, то вы могли бы использовать \U
в самом регулярном выражении без необходимости использовать лямбда-функции и просто могли заменить его на \1\U\2
Демонстрация регулярных выражений для регулярных выражений на основе PCRE