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

时间:2018-08-30 15:08:26

标签: python regex string

我有以下表达式

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

如何获取正则表达式以跳过后续字符,直到其到达mon10部分为止?

谢谢

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

您可以在此处使用<form action="georgeWelcomePage.php" method="post"> <div id="main"> <div class="row"> <div> <label for="name">Name</label><br> <input type="text" name="name"> </div> <div> <label for="company">Company</label><br> <input type="text" name="company"> </div> </div> <div class="row"> <div> <label for="visiting">Visiting</label><br> <input type="text" name="visiting"> </div> <div> <label for="badge">Badge</label><br> <input type="text" name="badge"> </div> </div> <div class="row"> <input type="submit" value="Sign In" class="btn"> </div> </form>

re.sub

RegEx Demo

详细信息:

  • >>> 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 :匹配0或开头的任何字符(惰性)
  • ^.*?:匹配并捕获(rcp\d+),后跟#1组中的1个以上数字
  • rcp:匹配0或任意字符(贪婪)
  • .*:匹配并捕获(_mon\d+),后跟#2组中的1个以上数字
  • _mon:匹配所有内容

  • .*:用组#1和组#2的反向引用替换字符串