--- 
name: Regular Expressions (Python)
fileTypes: 
- re
scopeName: source.regexp.python
repository: 
  character-class: 
    patterns: 
    - name: constant.character.character-class.regexp
      match: \\[wWsSdDhH]|\.
    - name: constant.character.escape.backslash.regexp
      match: \\.
    - name: constant.other.character-class.set.regexp
      endCaptures: 
        "1": 
          name: punctuation.definition.character-class.regexp
      begin: (\[)(\^)?
      beginCaptures: 
        "1": 
          name: punctuation.definition.character-class.regexp
        "2": 
          name: keyword.operator.negation.regexp
      end: (\])
      patterns: 
      - include: "#character-class"
      - name: constant.other.character-class.range.regexp
        captures: 
          "2": 
            name: constant.character.escape.backslash.regexp
          "4": 
            name: constant.character.escape.backslash.regexp
        match: (.|(\\.))\-([^\]]|(\\.))
uuid: DD867ABF-1EC6-415D-B047-687F550A1D51
foldingStartMarker: (/\*|\{|\()
patterns: 
- name: keyword.control.anchor.regexp
  match: \\[bBAZzG]|\^|\$
- name: keyword.other.back-reference.regexp
  match: \\[1-9][0-9]?
- name: keyword.operator.quantifier.regexp
  match: "[?+*][?+]?|\\{(\\d+,\\d+|\\d+,|,\\d+|\\d+)\\}\\??"
- name: keyword.operator.or.regexp
  match: \|
- name: comment.block.regexp
  begin: \(\?\#
  end: \)
- name: comment.line.number-sign.regexp
  match: (?<=^|\s)#\s[[a-zA-Z0-9,. \t?!-:][^\x00-\x7F]]*$
  comment: We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.
- name: keyword.other.option-toggle.regexp
  match: \(\?[iLmsux]+\)
- name: keyword.other.back-reference.named.regexp
  match: (\()(\?P=([a-zA-Z_][a-zA-Z_0-9]*\w*))(\))
- name: meta.group.assertion.regexp
  endCaptures: 
    "1": 
      name: punctuation.definition.group.regexp
  begin: (\()((\?=)|(\?!)|(\?<=)|(\?<!))
  beginCaptures: 
    "6": 
      name: meta.assertion.negative-look-behind.regexp
    "1": 
      name: punctuation.definition.group.regexp
    "2": 
      name: punctuation.definition.group.assertion.regexp
    "3": 
      name: meta.assertion.look-ahead.regexp
    "4": 
      name: meta.assertion.negative-look-ahead.regexp
    "5": 
      name: meta.assertion.look-behind.regexp
  end: (\))
  patterns: 
  - include: $self
- name: meta.group.assertion.conditional.regexp
  begin: (\()(\?\(([1-9][0-9]?|[a-zA-Z_][a-zA-Z_0-9]*)\))
  beginCaptures: 
    "1": 
      name: punctuation.definition.group.regexp
    "2": 
      name: punctuation.definition.group.assertion.conditional.regexp
    "3": 
      name: entity.name.section.back-reference.regexp
  end: (\))
  patterns: 
  - include: $self
  comment: we can make this more sophisticated to match the | character that separates yes-pattern from no-pattern, but it's not really necessary.
- name: meta.group.regexp
  endCaptures: 
    "1": 
      name: punctuation.definition.group.regexp
  begin: (\()((\?P<)([a-z]\w*)(>)|(\?:))?
  beginCaptures: 
    "6": 
      name: punctuation.definition.group.no-capture.regexp
    "1": 
      name: punctuation.definition.group.regexp
    "3": 
      name: punctuation.definition.group.capture.regexp
    "4": 
      name: entity.name.section.group.regexp
    "5": 
      name: punctuation.definition.group.capture.regexp
  end: (\))
  patterns: 
  - include: $self
- include: "#character-class"
foldingStopMarker: (\*/|\}|\))
comment: Matches Python's regular expression syntax.
