如何限制出现在正则表达式中的某些字符

时间:2016-03-02 03:21:29

标签: python regex

我知道标题可能不清楚,所以我将更具体地描述我的问题。

这是两个字符串:

  1. '基金资产'

  2. '基金通过投资至少80%的总资产来实现其投资目标

  3. 我的目标是第一个字符串,所以我使用这个正则表达式代码来获取它:

    r'fund+.+asset+'
    

    我在'fund +'和'asset +'之间使用'。+'的原因是因为还有其他情况可能在'fund'和'asset'之间有额外的词,比如'fund total asset'。所以我必须使用'。+'来确保我可以获得所有可能的目标。

    然而,第二个字符串,也将被捕获,显然不是我的目标。所以我想限制'基金'和'资产'之间的金额。

    伪代码是这样的:

    r'fund+(.+<=6)asset+'
    

    所以我限制'基金'和'资产'之间的字符数量不应超过6。

    正则表达式可以这样做吗?感谢您的帮助! :)

2 个答案:

答案 0 :(得分:1)

您可以使用{} operator

r'fund.{1,8}assets'

将匹配&#34; fund&#34;之间的1到8个任意字符和&#34;资产&#34;。

以下是演示:http://refiddle.com/refiddles/56d65e8b75622d6956086500

答案 1 :(得分:1)

使用curly braces检查重复次数:

  

{m,n}   导致生成的RE从匹配前一个RE的m到n次重复,尝试匹配尽可能多的重复。例如,a{3,5}将匹配3到5&#39; a&#39;字符。省略m指定零的下限,省略n指定无限上限。例如,a{4,}b将匹配aaaab或一千个&#39; a&#39;字符后跟一个b,但不是aaab。逗号可能不会被省略,或者修饰符会与之前描述的形式混淆。

fund.{1,7}assets

匹配fund assetsfund total assets,但不匹配fund seeks to achieve its investment objective by investing at least 80% of its total assets

>>> re.search(r'fund.{1,7}assets', 'fund assets')
<_sre.SRE_Match object at 0x107951098>
>>> re.search(r'fund.{1,7}assets', 'fund total assets')
<_sre.SRE_Match object at 0x107951030>
>>> re.search(r'fund.{1,7}assets', 'fund seeks to achieve its investment objective by investing at least 80% of its total assets')
>>> 
此处使用

7使其适用于您的fund total assets示例 - total长度为5个字符加上该字周围的两个空格。