Вы можете сделать:
re.sub(r'(genNode\()\[([^]]+)\]', r'\1\2', line)
(genNode\()
совпадений genNode(
и поместить его в захваченную группу 1 \[
совпадений буквально [
([^]]+)
соответствует следующему ]
и помещает его в захваченную группу 2 \]
соответствует буквальному ]
В замене мы имеемиспользовали только захваченные группы, то есть отброшенные [
и ]
.
Вы можете избавиться от первой захваченной группы, используя положительный вид с нулевой шириной , чтобы соответствоватьчасть перед [
:
re.sub(r'(?<=genNode\()\[([^]]+)\]', r'\1', line)
Пример:
In [444]: line = "assert Solution().oddEvenList(genNode([2,1,3,5,6,4,7])) == genNode([2,3,6,7,1,5,4]), 'Example 2'"
In [445]: re.sub(r'(genNode\()\[([^]]+)\]', r'\1\2', line)
Out[445]: "assert Solution().oddEvenList(genNode(2,1,3,5,6,4,7)) == genNode(2,3,6,7,1,5,4), 'Example 2'"
In [446]: re.sub(r'(?<=genNode\()\[([^]]+)\]', r'\1', line)
Out[446]: "assert Solution().oddEvenList(genNode(2,1,3,5,6,4,7)) == genNode(2,3,6,7,1,5,4), 'Example 2'"
FWIW, используя вместо этого типичный не жадный шаблон .*?
из [^]]+
также будет работать:
re.sub(r'(?<=genNode\()\[(.*?)\]', r'\1', line)