Регулярное выражение для удаления пробелов после круглого питона - PullRequest
1 голос
/ 27 сентября 2019

У меня есть строки, такие как:

s1 = 'Hello , this is a [ test ] string with ( parenthesis ) .'

Я пытаюсь удалить пробелы, окружающие пунктуацию, поэтому она должна выглядеть следующим образом:

s1 = 'Hello, this is a [test] string with (parenthesis).'

Я нашел это немногокод отсюда: Как убрать пробел до, но не после пунктуации в python

req = re.sub(r'\s([?,.!"](?:\s|$))', r'\1', text)

я добавил] и) в регулярное выражение, чтобы включить удаление пробела после] или)

 req = re.sub(r'\s([?,.!\])"](?:\s|$))', r'\1', text)

Итак, теперь это выглядит так:

s1 = 'Hello, this is a [ test] string with ( parenthesis).'

Теперь я пытался настроить это, чтобы также удалить пробелы до [или (но я не могу понять, как. Яочень сбит с толку, когда приходит выражение regex.

Я понимаю, что re.sub () заменяет второй аргумент (r '\ 1') на первый аргумент, но я не понимаю, что (r '\ 1') на самом деле означает.

Любая помощь будет оценена,

Приветствия

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

Это может помочь при использовании lookbehind & lookahead.

import re

s1 = 'Hello , this is a [ test ] string with ( parenthesis ).'
#print(re.sub(r"(?<=\[|\()(.*?)(?=\)|\])", lambda x: x.group().strip(), s1))
print(re.sub(r'(\s([?,.!"]))|(?<=\[|\()(.*?)(?=\)|\])', lambda x: x.group().strip(), s1))

Вывод:

Hello, this is a [test] string with (parenthesis).
1 голос
/ 27 сентября 2019

Один из способов - не захватывать пробел в начале и конце внутри круглых скобок, то есть

 (parens start) some space (capture text) some space (parens close)
      |                          |                         |
   Group 1                   Group 2                    Group 3

Совпадение . or , preceded by space using alternation и захватывать его в отдельной группе

([[({])\s*(.*?)\s*([\]\)\}])|\s+([,.])

enter image description here

Заменить на \1\2\3\4

Regex Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...