Несмотря на то, что ваши требования немного размыты, разумный выстрел, учитывая вашу конкретную входную строку, похоже, разбит на любое пространство, перед которым стоит литерал .
, а за ним следует буквенный шаблон (letter)
.
import re
s = "(a) be given by XXX for its election per scenario 3.3(a). (b) Second statement has a section 4.2(b) which might elect for scenario 2.4(a) potentially"
print(re.split(r"(?<=\.) (?=\([a-z]\))", s))
Вывод:
['(a) be given by XXX for its election per scenario 3.3(a).',
'(b) Second statement has a section 4.2(b) which might elect for scenario 2.4(a) potentially']
Я бы рекомендовал использовать это на большом или сложном вводе, потому что высока вероятность ложных срабатываний.
Другая идея: есливы гарантированно получите каждую букву алфавита для извлечения, уверены, что каждая буква будет отображаться в конце концов и по порядку, и хотите рассматривать что-либо не по порядку как нормальное содержимое, вы можете попробовать создать гигантское регулярное выражение:
import re
from string import ascii_lowercase
s = "(a) be given by XXX for its election per scenario 3.3(a). (b) Second statement has a section 4.2(b) which might elect for scenario 2.4(a) potentially. (c) blah blah (c) blah blah (d) asd ad(a) (b) (e) ee (b) (a) (d) (f) (f) fff f ff (g) (a) gggg (h) hhhh (b) (i) iii i i (i) i (j) jjj (k) k (l) ll (a) (b) (x) (m) mm (n) nn (o) oo) () () (p) ppp (A) (B) (Q) (q) qq (r) rr (s) ss (t) tt( u ) (u) uu (v) vvv (ww) (w) ww (x) xx (y) yy (z) zzz"
pattern = "".join([f"((?: |^)\({l}\) .+)" for l in ascii_lowercase])
for result in re.findall(pattern, s)[0]:
print(result.strip())
Вывод:
(a) be given by XXX for its election per scenario 3.3(a).
(b) Second statement has a section 4.2(b) which might elect for scenario 2.4(a) potentially. (c) blah blah
(c) blah blah
(d) asd ad(a) (b)
(e) ee (b) (a) (d) (f)
(f) fff f ff
(g) (a) gggg
(h) hhhh (b) (i) iii i i
(i) i
(j) jjj
(k) k
(l) ll (a) (b) (x)
(m) mm
(n) nn
(o) oo) () ()
(p) ppp (A) (B) (Q)
(q) qq
(r) rr
(s) ss
(t) tt( u )
(u) uu
(v) vvv (ww)
(w) ww
(x) xx
(y) yy
(z) zzz
Это все еще делает некоторые широкие предположения относительно ввода, но, возможно, стоило бы поиграть с ним;Считайте это доказательством концепции.
Новые строки - это еще одна проблема, о которой стоит подумать, если таковая имеется (среди многих других вещей).Короче говоря, написание парсера вручную может быть лучше, чем регулярное выражение.