Может быть,
!\s+[A-Z](\d)\s{2,}[A-Z]\((\d+),(\d+)?,?(\d+)?,?(\d+)?,?\)\s{2,}(-?\d+\.\d*)
может быть близко к тому, что вы хотели бы написать.
Тест
import re
regex = r"!\s+[A-Z](\d)\s{2,}[A-Z]\((\d+),(\d+)?,?(\d+)?,?(\d+)?,?\)\s{2,}(-?\d+\.\d*)"
string = """
! R1 R(1,2) 1.0881
! R2 R(1,3) 1.0881
! R3 R(1,4) 1.0881
! R4 R(1,5) 1.0881
! A1 A(2,1,3) 109.4712
! A2 A(2,1,4) 109.4712
! A3 A(2,1,5) 109.4712
! A4 A(3,1,4) 109.4712
! A5 A(3,1,5) 109.4712
! A6 A(4,1,5) 109.4712
! D1 D(2,1,4,3) -120.0
! D2 D(2,1,5,3) 120.0
! D3 D(2,1,5,4) -120.0
! D4 D(3,1,5,4) 120.0
"""
print(re.findall(regex, string))
Выход
[('1', '1', '2 ',' ',' ',' 1.0881 '), (' 2 ',' 1 ',' 3 ',' ',' ',' 1.0881 '), (' 3 ',' 1 ',' 4 ', '', '', '1.0881'), ('4', '1', '5', '', '', '1.0881'), ('1', '2', '1', '3 ',' ',' 109.4712 '), (' 2 ',' 2 ',' 1 ',' 4 ',' ',' 109.4712 '), (' 3 ',' 2 ',' 1 ','5 ',' ',' 109.4712 '), (' 4 ',' 3 ',' 1 ',' 4 ',' ',' 109.4712 '), (' 5 ',' 3 ',' 1 ','5 ',' ',' 109.4712 '), (' 6 ',' 4 ',' 1 ',' 5 ',' ',' 109.4712 '), (' 1 ',' 2 ',' 1 ','4 ',' 3 ',' -120.0 '), (' 2 ',' 2 ',' 1 ',' 5 ',' 3 ',' 120.0 '), (' 3 ',' 2 ',' 1',' 5 ',' 4 ',' -120.0 '), (' 4 ',' 3 ',' 1 ',' 5 ',' 4 ',' 120.0 ')]
Если вы хотите упростить / изменить / изучить выражение, это объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в этой ссылке , как она будет сопоставляться с некоторыми примерами входных данных.
RegEx Circuit
jex.im визуализирует регулярные выражения:
![enter image description here](https://i.stack.imgur.com/U6gTl.png)