与正则表达式中的字符数不匹配

2024-10-01 09:33:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下表达式

diff_pr_EUR-44_cordex_rcp45_mon_ave_2048-2060_minus_2005-2017_mon10_ave1_withsd.nc

我想使用regex提取并生成以下字符串

rcp45_mon10

到目前为止,我已经在网上regex tester上试过了

rcp\d\d[^.]+mon\d+

比我需要的更多

rcp45_mon_ave_2048-2060_minus_2005-2017_mon10

如何让regex跳过后面的字符,直到到达mon10部分

谢谢


Tags: 字符串表达式diffpreurregexncmon
2条回答

您可以在这里使用re.sub

>>> s = 'diff_pr_EUR-44_cordex_rcp45_mon_ave_2048-2060_minus_2005-2017_mon10_ave1_withsd.nc'
>>> print (re.sub(r'^.*?(rcp\d+).*(_mon\d+).*', r'\1\2', s))
rcp45_mon10

RegEx Demo

详情:

  • ^.*?:在开始处匹配0或任意字符(lazy)
  • (rcp\d+):匹配并捕获rcp,在第1组中后跟1+个数字
  • .*:匹配0或任意字符(贪婪)
  • (_mon\d+):匹配并捕获_mon,后跟第2组中的1+个数字
  • .*:匹配任何内容直到结束

  • r'\1\2':用组#1和组#2的反向引用替换字符串

您可以使用两个匹配组和join进行匹配:

>>> ''.join(re.findall(r'(rcp\d{2}).*?(\_mon\d{2})', s)[0])
'rcp45_mon10'

相关问题 更多 >