Regex-字符串前一年的第一个实例
示例文本: 2019 2018 2017 ... 2015 2014 2013 负债总额14551633 股东权益2100 2599 期望输出: 全场比赛: 2015 2014 2013 负债总额14551633 股东权益2100 2599 第一组(年份)=2015年、2014年、2013年 第2组(目标数据)=股东权益2100 2599 我只需要匹配20xx年,19xx年。 目标后面的数字可以大于或小于2,可以包含也可以不包含,或者前面有$符号Regex-字符串前一年的第一个实例,regex,Regex,示例文本: 2019 2018 2017 ... 2015 2014 2013 负债总额14551633 股东权益2100 2599 期望输出: 全场比赛: 2015 2014 2013 负债总额14551633 股东权益2100 2599 第一组(年份)=2015年、2014年、2013年 第2组(目标数据)=股东权益2100 2599 我只需要匹配20xx年,19xx年。 目标后面的数字可以大于或小于2,可以包含也可以不包含,或者前面有$符号 ((?:20\d\d\s*|19\d\d\s*)
((?:20\d\d\s*|19\d\d\s*)+).*(stockowners'\s+equity\s+(?:\s*\$?\s*\d+,?\d+)+)
(注:我已勾选了dotall标志)
当前正则表达式的问题在于,它先提取第一组日期,然后提取所有数据,直到股东权益。如何提取最后的日期序列?我曾想过反转字符串并向后搜索,但它是一个很大的文本文件,而且耗时太长
任何帮助都将不胜感激
第二个例子: 字符串:“2019年2018年资产300美元2017年负债100美元权益200美元” 和目标股权 我想选择第1组:2017年至2016年,第2组:股权200美元;完全匹配:2017年2016年负债100美元权益200美元 阐述: 我正试图使用正则表达式从旧的SEC文件中获取信息(大部分是10 ks)。这些文档没有足够的html标记,无法使用beautifulsoup进行解析。我从一次这样的文件中复制了以下内容。假设我想收集有关投资证券的数据。我想得到101017和91339,但2001年和2000年在顶部;以便我知道这些数字对应的年份 我的问题是这些文档充满了表格,它们都以年份开头(但不总是相同的年份)。我想从下表中选择我的目标投资证券的年份 截至2001年12月31日(以百万计)2000年
资产 现金及等价物9082美元8195美元
投资证券101017 91339您可以使用match,直到最后一次出现匹配19或20,后跟2个数字,其中没有数字后跟左侧的空格,然后在组1中捕获重复年份部分 然后捕获第2组中的股东部分
((?:\b(?:20|19)\d\d\s+)+)(?!.*(?:\b(?:20|19)\d\d\b)).*?\s+((?:stockowners'\s+)?\bequity\s+\$?\s*\d+(?:,\d+)?(?:\s+\$?\s*\d+(?:,\d+)?)*)$
图案会匹配的
Capturegroup 1(
重复1+次匹配20或19,后跟2位数字和1+空格字符(?:\b(?:20 | 19)\d\d\s+)
关闭第1组)
负前瞻,断言右侧不再出现年份模式(?!.*(:\b(?:20 | 19)\d\d\b))
尽可能将除换行符以外的任何字符的0+倍匹配,并匹配空白字符*?\s
捕获第2组(
可以选择匹配'stockowners'(?:stockowners'\s+)
Match\bequity\s+
equity
匹配可选的\$?\s*\d+(?:,\d+)
和带可选小数部分的1+数字$
重复0+次,与前面的部分匹配,并添加1+空格字符(?:\s+\$?\s*\d+(?:,\d+)*
关闭第2组)
字符串结尾$
您能详细说明一下吗?你需要在某个字符串之前出现的前3年吗?在您的全场比赛中排除2019年2018年2017年……的原因是什么?这背后的逻辑是什么?比赛应该在哪里结束?正则表达式本身可以修改为更平滑的东西,但作为一个POC,你要检索什么?@JvdV如果你同意的话,我已经使用POC的消极前瞻性建议更新了我的答案。否则我可以删除我的答案,如果你愿意,你可以把它贴出来。不需要问。@Thefourthbird。我的是一个模拟评论。我想我的解释可能有缺陷。字符串:“2019年2018年资产300美元2017年负债100美元权益200美元”;和目标股权——我想选择第1组:2017年至2016年,第2组:股权200美元;完全匹配:2017年2016年负债100美元股权200美元当我测试上述内容时,我得到了与整个字符串匹配的结果,第一组为2019年2018年,这就成功了。消极前瞻是关键。非常感谢