Я хочу, чтобы регулярные выражения соответствовали всем числам в скобках, но не числам, которым предшествует число в словах.
Например, они совпадают:
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)))