Исходя из того, что вы сказали, что хотите, и того, что вы сказали: «У меня есть строка»:
У меня есть строка
'Aaa Bbb', 'AaaBbbCcc',' OneTwost.Three '
Это должно сделать это.
Вход:
>>> import re
>>> string = """'Aaa Bbb', 'AaaBbbCcc' ,'OneTwost.Three'"""
Выход:
>>> re.sub(r'((?<![\',\s])[A-Z]+|[\S]{2}\.)', r' \1', string)
"'Aaa Bbb', 'Aaa Bbb Ccc' ,'One Two st. Three'"
.
Редактировать
Вход (Действует на string
и новая переменная string_1
, которая удаляет'
s)
>>> import re
>>> string = """'Aaa Bbb', 'AaaBbbCcc' ,'OneTwost.Three'"""
>>> string_1 = """Aaa Bbb, AaaBbbCcc ,OneTwost.Three"""
Вывод
>>> re.sub(r'(?<!^)(?<!,)(?<!\s)(?<!\')([A-Z]+|[\S]{2}\.)', r' \1', string)
"'Aaa Bbb', 'Aaa Bbb Ccc' ,'One Two st. Three'"
>>> re.sub(r'(?:(?<!^)(?<!,)(?<!\s)(?<!\'))([A-Z]+|[\S]{2}\.)', r' \1',
string)
"'Aaa Bbb', 'Aaa Bbb Ccc' ,'One Two st. Three'"
>>> re.sub(r'(?<!^)(?<!,)(?<!\s)(?<!\')([A-Z]+|[\S]{2}\.)', r' \1', string_1)
'Aaa Bbb, Aaa Bbb Ccc ,One Two st. Three'
>>> re.sub(r'(?:(?<!^)(?<!,)(?<!\s)(?<!\'))([A-Z]+|[\S]{2}\.)', r' \1', string_1)
'Aaa Bbb, Aaa Bbb Ccc ,One Two st. Three'
.
Объяснение первого:
- Сделано в виде строки, как указано в вашей цитате
- Использование re.sub в этой ситуации с параметром raw_string (r) для печатидинамические / изменяемые / переменные функции захвата и будут возвращать отредактированную строку
- С первым
"("
Я настраиваю его для захвата всего в следующем запросе - С
"(?<![\',\s])"
I 'Я говорю, убедитесь, что то, что следует, что я пытаюсь захватить, не является предварительнымзавершается символом «» или «пробел» - С позицией
"[A-Z]+"
там, где она находится, я говорю захватить любую группу заглавных букв ( НО ПРИМЕЧАНИЕ: Это также будет соответствовать ABC, SDZ, FFRD, ZXF и т. Д., Но не будут захватывать строчные буквы или другие символы ) - С
"|"
Я говорю движку «ИЛИ» захватить следующий запрос - И с
"[\S]{2}\."
я говорю «захват», если вы найдете 2 любых «непробельных символа», за которыми следует «.» - Финальный
")"
завершает директиву группы захвата - .
- Со вторым аргументом "r '\ 1'" я говорю, напечатайте первую группу, которую вы захватили (в этом случае у меня в любом случае только 1 группа захвата) и поместите перед ней один пробел
Редактировать: Небольшое объяснение следующих 2, которые могут действовать на string_1
Клянусь, поведение re.sub
с поискомпросто вонючийУчитывая ваш комментарий ниже.В каждом из (?<!YOUR_IGNORED_CHARACTER)
я говорю re.sub, по сути, не захватывать, если заглавные буквы предшествуют обозначенному символу.(?<!^)
, однако, означает, что не захватывать, если группа захвата происходит в начале строки.
Обратите внимание, что в строке для этого примера я удалил '
из того, что вы дали.