Вход
; (Col1 Col2 (Col3 Col4 Col5) )
Мне нужно оставить пробел между Col3 Col4 Col4
"\(.+\(([^()]*)\)\)*"gm
; (113 (1 2 3) )
Мне удалось получить все (1 2 3)
. Но как получить только пространство между ними?
Идея состоит в том, чтобы получить результат:
; (113 (123) )
Регулярное выражение может соответствовать только непрерывной подстроке. Поэтому он не может удалить пробелы.
вы продолжаете говорить «получить место», но кажется, что вы хотите удалить пробелы.
В зависимости от того, насколько обобщаема ваша потребность в удалении пробелов между значениями, вы можете использовать проверки просмотра назад и вперед, чтобы удалять пробелы только в том случае, если они окружены буквенно-цифровыми символами:
import re
string = "; (113 (1 2 3) )"
pattern = r"(?<=\w) (?=\w)"
result = re.sub(pattern, "", string)
assert result == "; (113 (123) )"
Обратите внимание, что это также объединит Col1
и Col2
в вашем первом вводе, но вы можете сначала сопоставить самую внутреннюю скобку с другим регулярным выражением (r"\([^\(]+?\)"
)
Регулярное выражение в демо-версии отличается от того, что вы разместили здесь.