Python regex:包含数字的子句,可以有千位分隔符和小数



我有以下文本。我想收集所有子句(从逗号或句号到逗号或句号),其中有一个数字。我已经设法创建了下面的正则表达式,收集数字和它之后的部分,但由于我的数字可以有逗号或句号在里面,我不知道我怎么能抓住它之前的单词。我想要加粗的部分的句子:

与本次发行的完成有关,我们将进入与OrION Capital Structure达成远期购买协议Solutions UK Limited,或OrION,我们赞助商的附属公司,猎户座将承诺从我们这里购买一千万美元远期购买单位或按其选择,累计最大值为3000万远期采购单位,每个由一个A类组成普通股,或远期购买股票,和三分之一购买A类普通股的认股权证,或远期购买权证,每单位$10.00 ,或总金额为$100,000,000或根据OrION的选择,总额不超过3亿美元在…中私募配售将与我们的初始业务合并。

我想收集的:

["pursuant to which OrION will commit that it will purchase from us 10,000,000 forward purchase units",
"or at its option up to an aggregate maximum of 30,000,000 forward purchase units", "for $10.00 per unit", "or an aggregate amount of $100,000,000", "or at OrION’s option up to an aggregate amount of $300,000,000"]

我写的正则表达式当前获取数字和后面的部分,直到下一个逗号或句号。

[0-9]{1,2}([,.][0-9]{1,2})?.*?[.,]

如何收集句子的一部分(以句号或逗号开头),以及可以包含小数或千位分隔符的数字,然后收集句子的一部分,直到下一个逗号或句号?

编辑:anubhava和bb1都给出了正确的答案。anubhava完全按照我的要求解决了这个问题,这是正确的答案。然而,bb1准备了一些注定要发生的事情(我没有想到),所以最后我使用了他的答案,但标记anubhava作为给出解决方案的人,因为这是我所要求的确切解决方案。

编辑2:anubhava已经更新了他的答案,所以它解决了与bb1-s相同的问题。

您可以将此正则表达式用于查找断言:

(?<=[.,] )(?:[^,.]*?d+(?:[.,]d+)*)+[^.,]*(?=[,.])

RegEx演示

RegEx细节:

  • (?<=[.,] ): Lookbehind断言断言当前位置前有逗号或点后跟空格
  • (?::启动非抓包组
    • [^,.]*?:匹配0个或多个非,.(lazy)的字符
    • d+(?:[.,]d+)*:匹配可能包含.,的数字
  • )+:结束非抓包组。+重复此组1+次
  • [^.,]*:匹配0个或多个非,.的字符
  • (?=[,.]): Lookahead断言断言当前位置后面有逗号或点

如果字符串段中有一个数字被逗号或句号括起来,则anubhava的解决方案可以很好地工作,但不包括有多个数字的情况,例如

"Therefore, this costs $10,000 and that costs $20,000 per item."

如果有帮助的话,这里有一个处理这种情况的版本:

(?<=[,.])(?:[^,.]*?d+(?:[,.]d+)*[^,.]*?)+(?=[,.])

相关内容

  • 没有找到相关文章

最新更新