我知道标题可能不清楚,所以我将更具体地描述我的问题。
这是两个字符串:
'基金资产'
'基金通过投资至少80%的总资产来实现其投资目标
我的目标是第一个字符串,所以我使用这个正则表达式代码来获取它:
r'fund+.+asset+'
我在'fund +'和'asset +'之间使用'。+'的原因是因为还有其他情况可能在'fund'和'asset'之间有额外的词,比如'fund total asset'。所以我必须使用'。+'来确保我可以获得所有可能的目标。
然而,第二个字符串,也将被捕获,显然不是我的目标。所以我想限制'基金'和'资产'之间的金额。
伪代码是这样的:
r'fund+(.+<=6)asset+'
所以我限制'基金'和'资产'之间的字符数量不应超过6。
正则表达式可以这样做吗?感谢您的帮助! :)
答案 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 assets
和fund 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个字符加上该字周围的两个空格。