Регулярные выражения соответствуют всем числам в скобках, но не после числа в словах - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу, чтобы регулярные выражения соответствовали всем числам в скобках, но не числам, которым предшествует число в словах.

Например, они совпадают:

Hi (1)
(100)
Yes (1000)

Но этине совпадают:

One (1)
One hundred (100)
Five thousand (5000)
Twelve (12)

Вот как я думаю, что регулярное выражение должно быть, но оно не работает ..

(\(\d+\)|(?!one[ ]\((\d+)\))|(?!two[ ]\((\d+)\))|(?!three[ ]\((\d+)\))|(?!four[ ]\((\d+)\))|(?!five[ ]\((\d+)\))|(?!six[ ]\((\d+)\))|(?!seven[ ]\((\d+)\))|(?!eight[ ]\((\d+)\))|(?!nine[ ]\((\d+)\))|(?!ten[ ]\((\d+)\))|(?!eleven[ ]\((\d+)\))|(?!twelve[ ]\((\d+)\))|(?!thirteen[ ]\((\d+)\))|(?!fourteen[ ]\((\d+)\))|(?!fifthteen[ ]\((\d+)\))|(?!sixteen[ ]\((\d+)\))|(?!seventeen[ ]\((\d+)\))|(?!eighteen[ ]\((\d+)\))|(?!nineteen[ ]\((\d+)\))|(?!twenty[ ]\((\d+)\))|(?!thirty[ ]\((\d+)\))|(?!forty[ ]\((\d+)\))|(?!fifty[ ]\((\d+)\))|(?!sixty[ ]\((\d+)\))|(?!seventy[ ]\((\d+)\))|(?!eighty[ ]\((\d+)\))|(?!ninety[ ]\((\d+)\))|(?!hundred[ ]\((\d+)\))|(?!thousand[ ]\((\d+)\))|(?!million[ ]\((\d+)\)))

ОБНОВЛЕНИЕ:

Что яПопытка сделать это дает строку, такую ​​как:

Hi (1) (100) Yes (1000) But these are not matched: One (1) One hundred (100) Five thousand (5000) Twelve (12)

Я хочу создать функцию, которая соответствует только числам в скобках, НО НЕ предшествует число в словах, и возвращает:

Hi (1)\n (100)\n Yes (1000)\n But these are not matched: One (1) One hundred (100) Five thousand (5000) Twelve (12)'

ОБНОВЛЕНИЕ 2:

Судя по комментариям, это лучший ответ, который я могу получить.Но все еще возникают проблемы, поскольку группа не работает должным образом, чтобы соответствовать только первой группе

def split(s):
    reg = re.compile(r"\b(?:one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifthteen|sixteen|seventeen|eighteen|nineteen|twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|hundred|thousand|million)+[ ]{0,1}\(\d+\)|\((\d+)\)", re.IGNORECASE)
    s = reg.sub(lambda match: match.group(0) + '\n', s)
    return next(i) + '\n'.join(map(' '.join, zip(i, i)))
...