Skip to content

re.sub not replacing all #61863

Description

@z06steve
mannequin
BPO 17663
Nosy @ezio-melotti, @bitdancer
Superseder
  • bpo-11957: re.sub confusion between count and flags args
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = <Date 2013-04-08.13:36:01.437>
    created_at = <Date 2013-04-08.13:25:17.065>
    labels = ['expert-regex']
    title = 're.sub not replacing all'
    updated_at = <Date 2014-10-29.16:12:53.663>
    user = 'https://bugs.python.org/z06steve'

    bugs.python.org fields:

    activity = <Date 2014-10-29.16:12:53.663>
    actor = 'vstinner'
    assignee = 'none'
    closed = True
    closed_date = <Date 2013-04-08.13:36:01.437>
    closer = 'r.david.murray'
    components = ['Regular Expressions']
    creation = <Date 2013-04-08.13:25:17.065>
    creator = 'z06steve'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 17663
    keywords = []
    message_count = 3.0
    messages = ['186300', '186302', '186519']
    nosy_count = 4.0
    nosy_names = ['ezio.melotti', 'mrabarnett', 'r.david.murray', 'z06steve']
    pr_nums = []
    priority = 'normal'
    resolution = 'duplicate'
    stage = 'resolved'
    status = 'closed'
    superseder = '11957'
    type = None
    url = 'https://bugs.python.org/issue17663'
    versions = ['Python 3.2', 'Python 3.3']

    Activity

    1. z06steve commented on Apr 8, 2013

      z06stevemannequin
      MannequinAuthor

      fails to replace last occurrence of string v_wofstgvw, reproduced in 3.2.3, 3.2.4 and 3.3.1

      a='''

      -- V_INT_CTRC_ENTRY_DATE
      --------------------------------------------------------------------------------
      REPLACE VIEW V_WOFSTGVW.V_INT_CTRC_ENTRY_DATE AS LOCKING ROW FOR ACCESS
      SELECT
      D.DY DY,
      D.DW_CRRT_FL CURRENT_FLAG,
      D.MTH CURRENT_MTH,
      (CAST(D.DY AS DATE) - EXTRACT(DAY FROM (CAST( D.DY AS DATE)))+1) CURRENT_MTH_BEG_DT,
      ADD_MONTHS ((CAST(D.DY AS DATE) - EXTRACT(DAY FROM (CAST( D.DY AS DATE)))+1) , 1) - 1 CURRENT_MTH_END_DT,
      D.WOFC_MTH_END_FLG CURRENT_MTH_END_FLG,
      D.WOFC_QTR_END_FLG CURRENT_QTR_END_FL,
      D.YR CURRENT_YEAR,
      ((D.YR||'01/01')(DATE)) CURRENT_YEAR_BEG_DT ,
      ((D.YR||'12/31')(DATE)) CURRENT_YEAR_END_DT ,
      D.WOFC_YR_END_FLG CURRENT_YEAR_END_FL,
      D.HDAY_FLG HOLIDAY_FLG,
      CAST(ADD_MONTHS (CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN WOFCO_FRST_DY_MTH
      ELSE WOFCO_BEGIN_MTH_DT
      END,
      -1)AS CHAR(7)) PREV_REP_MTH,
      ADD_MONTHS (CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN WOFCO_FRST_DY_MTH
      ELSE WOFCO_BEGIN_MTH_DT
      END,
      -1
      ) PREV_REP_MTH_BEG_DT,
      ADD_MONTHS (CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN D.DY
      ELSE D.WOFCO_MTH_END_DT
      END,
      -1
      ) PREV_REP_MTH_END_DT
      ,
      D.PREV_MTH PRIOR_MTH,
      PSETM.PRIOR_SET_CURRENT_MTH,
      PSETM.PRIOR_SET_CURRENT_MTH_BGN_DT,
      PSETM.PRIOR_SET_CURRENT_MTH_END_DT,
      PREPSETM.PRIOR_SET_REP_MTH,
      PREPSETM.PRIOR_SET_REP_MTH_BGN_DT,
      PREPSETM.PRIOR_SET_REP_MTH_END_DT,
      CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN MTH
      ELSE PREV_MTH
      END REP_MTH,
      CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN WOFCO_FRST_DY_MTH
      ELSE WOFCO_BEGIN_MTH_DT
      END REP_MTH_BEG_DT,
      CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN D.DY
      ELSE D.WOFCO_MTH_END_DT
      END REP_MTH_END_DT,
      CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN ADD_MONTHS (D.WOFCO_FRST_DY_MTH,
      12
      )
      ELSE ADD_MONTHS (D.WOFCO_BEGIN_MTH_DT, 12)
      END REP_MTH_NEXT_YEAR_BEG_DT,
      CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN ADD_MONTHS (D.DY, 12)
      ELSE D.WOFCO_MTH_NXT_YR_DT
      END REP_MTH_NEXT_YEAR_END_DT,
      CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN D.YR
      ELSE SUBSTR (PREV_MTH, 1, 4)
      END REP_YEAR,
      CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN (CAST((CAST(D.YR AS DATE FORMAT 'YYYY')||'/01/01') AS DATE FORMAT 'YYYY/MM/DD'))
      ELSE (CAST((SUBSTR (PREV_MTH, 1, 4) || '/01/01')AS DATE FORMAT 'YYYY/MM/DD' ))
      END REP_YEAR_BEG_DT,
      CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN (CAST((CAST(D.YR AS DATE FORMAT 'YYYY' )||'/12/31') AS DATE FORMAT 'YYYY/MM/DD'))
      ELSE (CAST((SUBSTR (PREV_MTH, 1, 4) || '/12/31') AS DATE FORMAT 'YYYY/MM/DD' ))
      END REP_YEAR_END_DT,
      D.SET_MTH SET_CURRENT_MTH,
      D.SET_BEGIN_MTH_DT SET_CURRENT_MTH_BGN_DT,
      D.SET_MTH_END_DT SET_CURRENT_MTH_END_DT,
      D.SET_YR SET_CURRENT_YEAR,
      D1.SET_CURRENT_BEG_DT SET_CURRENT_YEAR_BEG_DT,
      D2.SET_CURRENT_END_DT SET_CURRENT_YEAR_END_DT,
      D.SET_MTH_END_FLG SET_MTH_END_FLAG,
      D.SET_QTR_END_FLG SET_QTR_END_FLAG,
      CASE D.SET_MTH_END_FLG
      WHEN 'Y'
      THEN (CAST (D.SET_BEGIN_MTH_DT AS CHAR(7)))
      ELSE (CAST (SET_MTH_BEG_PREV_DT AS CHAR (7)))
      END SET_REP_MTH,
      CASE D.SET_MTH_END_FLG
      WHEN 'Y'
      THEN D.SET_BEGIN_MTH_DT
      ELSE SET_MTH_BEG_PREV_DT
      END SET_REP_MTH_BEG_DT,
      CASE D.SET_MTH_END_FLG
      WHEN 'Y'
      THEN D.SET_MTH_END_DT
      ELSE SET_MTH_END_PREV_DT
      END SET_REP_MTH_END_DT,
      SUBSTR (CASE D.SET_MTH_END_FLG
      WHEN 'Y'
      THEN (CAST (D.SET_BEGIN_MTH_DT AS CHAR(7)))
      ELSE (CAST (SET_MTH_BEG_PREV_DT AS CHAR(7)))
      END,
      1, 4)SET_REP_YEAR ,
      RD1.SET_RPT_YEAR_BEG_DT SET_RPT_YEAR_BEG_DT,
      SYB.SET_RPT_YEAR_END_DT,
      D.SET_YR_END_FLG SET_YEAR_END_FLAG
      FROM V_WOFSTGVW.D_DT D
      LEFT OUTER JOIN
      (SELECT D.SET_YR,
      MIN (D.SET_BEGIN_YR_DT) SET_CURRENT_BEG_DT
      FROM V_WOFSTGVW.D_DT D
      WHERE (CAST (D.SET_BEGIN_YR_DT AS CHAR(4))) =
      D.SET_YR
      GROUP BY D.SET_YR) D1
      ON
      D1.SET_YR = D.SET_YR
      LEFT OUTER JOIN
      (SELECT D_SET_CURR_END.SET_YR, D_SET_CURR_END.DY SET_CURRENT_END_DT
      FROM V_WOFSTGVW.D_DT D_SET_CURR_END
      WHERE D_SET_CURR_END.SET_YR_END_FLG = 'Y') D2
      ON D2.SET_YR = D.SET_YR
      LEFT OUTER JOIN
      (SELECT CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN D.YR
      ELSE SUBSTR (D.PREV_MTH, 1, 4)
      END SET_RPT_YR,
      MIN (D.SET_BEGIN_YR_DT) SET_RPT_YEAR_BEG_DT
      FROM V_WOFSTGVW.D_DT D
      WHERE D.PREV_MTH IS NOT NULL
      AND SET_BEGIN_YR_DT IS NOT NULL
      GROUP BY CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN D.YR
      ELSE SUBSTR (D.PREV_MTH, 1, 4)
      END) RD1
      ON RD1.SET_RPT_YR =
      (CASE D.SET_MTH_END_FLG
      WHEN 'Y'
      THEN (CAST(D.SET_BEGIN_MTH_DT AS CHAR(4)))
      ELSE (CAST (D.SET_MTH_BEG_PREV_DT AS CHAR(4)))
      END
      )
      LEFT OUTER JOIN
      (SELECT D.SET_MTH, MIN (D.SET_MTH_END_DT) SET_RPT_YEAR_END_DT
      FROM V_WOFSTGVW.D_DT D
      WHERE D.SET_MTH =
      CASE D.SET_MTH_END_FLG
      WHEN 'Y'
      THEN (CAST(D.SET_BEGIN_MTH_DT AS CHAR(4)))
      ELSE (CAST (SET_MTH_BEG_PREV_DT AS CHAR(4)))
      END
      GROUP BY D.SET_MTH) SYB
      ON
      ( SYB.SET_MTH =
      CASE WOFC_MTH_END_FLG
      WHEN 'Y'
      THEN D.YR
      ELSE SUBSTR (D.PREV_MTH, 1, 4)
      END
      || '/12' )
      LEFT OUTER JOIN
      (SELECT DISTINCT D.SET_MTH_END_FLG SET_MTH_END_FLAG,
      D.SET_MTH PRIOR_SET_CURRENT_MTH,
      D.SET_BEGIN_MTH_DT PRIOR_SET_CURRENT_MTH_BGN_DT,
      D.SET_MTH_END_DT PRIOR_SET_CURRENT_MTH_END_DT
      FROM V_WOFSTGVW.D_DT D) PSETM
      ON
      PSETM.PRIOR_SET_CURRENT_MTH =
      (CAST (ADD_MONTHS (D.SET_BEGIN_MTH_DT, -1) AS CHAR(7)))
      AND PSETM.SET_MTH_END_FLAG = D.SET_MTH_END_FLG
      LEFT OUTER JOIN
      (SELECT DISTINCT D.SET_MTH_END_FLG SET_MTH_END_FLAG,
      D.SET_MTH PRIOR_SET_REP_MTH,
      D.SET_BEGIN_MTH_DT PRIOR_SET_REP_MTH_BGN_DT,
      D.SET_MTH_END_DT PRIOR_SET_REP_MTH_END_DT
      FROM V_WOFSTGVW.D_DT D) PREPSETM
      ON
      PREPSETM.PRIOR_SET_REP_MTH =
      (CAST (ADD_MONTHS (CASE D.SET_MTH_END_FLG
      WHEN 'Y'
      THEN D.SET_BEGIN_MTH_DT
      ELSE SET_MTH_BEG_PREV_DT
      END, -1 ) AS CHAR(7)) )
      AND PREPSETM.SET_MTH_END_FLAG = D.SET_MTH_END_FLG
      WHERE V_WOFSTGVW.D.DY <> DATE '9999-12-31';'''

      re.sub('v_wofstgvw','d_dscteve', a, re.MULTILINE, re.IGNORECASE)
    2. bitdancer commented on Apr 8, 2013

      @bitdancer
      Member

      The fourth argument to re.sub is the replacement count. You've passed it a flag.

    3. ezio-melotti commented on Apr 10, 2013

      @ezio-melotti
      Member
    4. transferred this issue fromon Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    No one assigned

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions