正则表达式匹配括号中的所有数字,但不匹配单词中的数字后的正则表达式

2024-05-27 11:17:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我期待正则表达式匹配括号内的所有数字,但不是数字前面的字。你知道吗

例如,它们是匹配的:

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)))

Tags: 数字hioneyesthreefourfivetwo

热门问题