如何重复匹配区域的某个部分而无需多次写入?
例如:
txt = '1. Reserve December 31, prior year.................................................................................................................. ..4,587,658,997 .......................... .1,030,275,014 .....136,963,988 .......................... .3,276,184,545 .....144,235,450 .......................... .......................... .......................... .......................... ..........................'
splitter = '^([\d.]+)(.*?)\.\s\.[\.\s]+(\(*\d[\d,.]*\)*)?[\.\s]+(\(*\d[\d,.]*\)*)?[\.\s]+(\(*\d[\d,.]*\)*)?[\.\s]+(\(*\d[\d,.]*\)*)?[\.\s]+(\(*\d[\d,.]*\)*)?[\.\s]+(\(*\d[\d,.]*\)*)?[\.\s]+(\(*\d[\d,.]*\)*)?[\.\s]+(\(*\d[\d,.]*\)*)?[\.\s]+(\(*\d[\d,.]*\)*)?[\.\s]+(\(*\d[\d,.]*\)*)?[\.\s]+(\(*\d[\d,.]*\)*)?[\.\s]+(\(*\d[\d,.]*\)*)?'
parts = re.match(splitter, x, re.DOTALL)
我的正则表达式的第一部分,^([\d.]+)(.*?)\.\s\.
获取行号和标题:
- 保留前一年的12月31日
之后,我必须重复此部分12次,以确保标题之后的数字能再获得12个匹配项[\.\s]+(\(*\d[\d,.]*\)*)?
。
如果没有12个数字,则返回None
该特定匹配项。
有没有一种方法可以重复此表达式12次而不必编写这么长的regex表达式?我尝试过(?:[\.\s]+(\(*\d[\d,.]*\)*)?){12}
但没有骰子。
我认为您只需要将第二部分放入组中,就可以在其周围加上(),然后将确切的计数放在该组之外,如下所示:
checkIt = re.compile(r'^([\d.]+)(.*?)\.\s\.([\.\s]+(\(*\d[\d,.]*\)*)?){12}')
if checkIt.match(text):
do something
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句