docs: def make_auth_regex_str(etal, initial_surname_author=None, surname_initial_author=None):
      """
          Returns a regular expression to be used to identify groups of author names in a citation.
          This method contains patterns for default authors, so no arguments are needed for the
          most reliable form of matching.
  
          The returned author pattern is capable of:
          1. Identifying single authors, with at least one initial, of the form:
          'Initial. [surname prefix...] Surname'
  
          2. Identifying multiple authors, each with at least one initial, of the form:
          'Initial. [surname prefix...] Surname, [and] [Initial. [surname prefix...] Surname ... ]'
          ***(Note that a full stop, hyphen or apostrophe after each initial is
          absolutely vital in identifying authors for both of these above methods.
          Initials must also be uppercase.)***
  
          3. Capture 'et al' statements at the end of author groups (allows for authors with et al
          to be processed differently from 'standard' authors)
  
          4. Identifying a single author surname name positioned before the phrase 'et al',
          with no initials: 'Surname et al'
  
          5. Identifying two author surname name positioned before the phrase 'et al',
          with no initials, but separated by 'and' or '&': 'Surname [and|&] Surname et al'
  
          6. Identifying authors of the form:
          'Surname Initials, Initials Surname [Initials Surname]...'. Some authors choose
          to represent the most important cited author (in a list of authors) by listing first
          their surname, and then their initials. Since this form has little distinguishing
          characteristics which could be used to create a reliable a pattern, at least one
          standard author must be present after it in order to improve the accuracy.
  
          7. Capture editor notation, of which can take many forms e.g.
          'eds. editors. edited by. etc.'. Authors captured in this way can be treated as
          'editor groups', and hence processed differently if needed from standard authors
  
          @param etal: (string) The regular expression used to identify 'etal' notation
          @param author: (string) An optional argument, which replaces the default author
          regex used to identify author groups (initials, surnames... etc)
  
          @return: (string) The full author group identification regex, which will:
          - detect groups of authors in a range of formats, e.g.:
              C. Hayward, V van Edwards, M. J. Woodbridge, and L. Kelloggs et al.,
          - detect whether the author group has been marked up as editors of the doc.
              (therefore they will NOT be marked up as authors) e.g.:
              ed. C Hayward | (ed) V van Edwards  | ed by, M. J. Woodbridge and V van Edwards
              | L. Kelloggs (editors) | M. Jackson (eds.) | ...
          -detect a maximum of two surnames only if the surname(s) is followed by 'et al'
           (must be separated by 'and' if there are two), e.g.:
              Amaldi et al., | Hayward and Yellow et al.,
      """
      if not initial_surname_author:
          # Standard author, with a maximum of 6 initials, and a surname.
          # The Initials MUST be uppercase, and MUST have at least a dot, hypen
          # or apostrophe between them.
          initial_surname_author = get_initial_surname_author_pattern()
  
      if not surname_initial_author:
          # The author name of the form: 'surname initial(s)'
          # This is sometimes the represention of the first author found inside an author group.
          # This author pattern is only used to find a maximum of ONE author inside an author group.
          # Authors of this form MUST have either a comma after the initials, or an 'and',
          # which denotes the presence of other authors in the author group.
          surname_initial_author = get_surname_initial_author_pattern()
  
      # Pattern used to locate a GROUP of author names in a reference
      # The format of an author can take many forms:
      # J. Bloggs, W.-H. Smith, D. De Samuel, G.L. Bayetian, C. Hayward et al.,
      # (the use of 'et. al' is a giveaway that the preceeding
      # text was indeed an author name)
      # This will also match authors which seem to be labeled as editors (with the phrase 'ed.')
      # In which case, the author will be thrown away later on.
      # The regex returned has around 100 named groups already (max), so any new groups must be
      # started using '?:'
  
      return ur"""
       (?:^|\s+|\()                                                     ## Must be the start of the line, or a space (or an opening bracket in very few cases)
       (?P<es>                                                        ## Look for editor notation before the author
        (?:(?:(?:[Ee][Dd]s?|[Ee]dited|[Ee]ditors?)((?:\.\s?)|(?:\.?\s)))                    ## 'eds?. '     | 'ed '      | 'ed.'
        |(?:(?:[Ee][Dd]s?|[Ee]dited|[Ee]ditions?)(?:(?:\.\s?)|(?:\.?\s))by(?:\s|([:,]\s)))    ## 'eds?. by, ' | 'ed. by: ' | 'ed by '  | 'ed. by '| 'ed by: '
        |(?:\(\s?([Ee][Dd]s?|[Ee]dited|[Ee]ditors?)(?:(?:\.\s?)|(?:\.?\s))?\)))           ## '( eds?. )'  | '(ed.)'    | '(ed )'   | '( ed )' | '(ed)'
       )?
  
                                                                      ## **** (1) , one or two surnames which MUST end with 'et al' (e.g. Amaldi et al.,)
     (?P<author_names>
         (?:
           (?:[A-Z](?:\s*[.'’-]{1,2}\s*[A-Z]){0,4}[.\s]\s*)?          ## Initials
           [A-Z][^0-9_\.\s]{2,20}(?:(?:[,\.]\s*)|(?:[,\.]?\s+))       ## Surname
           (?:[A-Z](?:\s*[.'’-]{1,2}\s*[A-Z]){0,4}[.\s]\s*)?          ## Initials
           (?P<multi_surs>
            (?:(?:[Aa][Nn][Dd]|\&)\s+)                                ## Maybe 'and' or '&' tied with another name
            [A-Z][^0-9_\.\s]{3,20}(?:(?:[,\.]\s*)|(?:[,\.]?\s+))      ## More surnames
            (?:[A-Z](?:[ -][A-Z])?\s+)?                               ## with initials
           )?
           (?:                     # Look for editor notation after the author group...
               \s*[,\s]?\s*        # Eventually a coma/space
               %(ed)s
           )?
           (?P<et2>
              %(etal)s                                                ## et al, MUST BE PRESENT however, for this author form
           )
           (?:                     # Look for editor notation after the author group...
               \s*[,\s]?\s*        # Eventually a coma/space
               %(ed)s
           )?
         ) |
  
          (?:
                                                                      ## **** (2) , The standard author form.. (e.g. J. Bloggs)
                                                                      ## This author form can either start with a normal 'initial surname' author,
                                                                      ## or it can begin with a single 'surname initial' author
  
              (?:                                                     ## The first author in the 'author group'
                 %(i_s_author)s |
                 (?P<sur_initial_auth>%(s_i_author)s)
              )
  
              (?P<multi_auth>
                  (?:                                                 ## Then 0 or more author names
                      \s*[,\s]\s*
                      (?:
                          %(i_s_author)s | %(s_i_author)s
                      )
                  )*
  
                  (?:                                                 ## Maybe 'and' or '&' tied with another name
                      (?:
                          \s*[,\s]\s*                                 ## handle "J. Dan, and H. Pon"
                          (?:[Aa][Nn][DdsS]|\&)
                          \s+
                      )
                      (?P<mult_auth_sub>
                          %(i_s_author)s | %(s_i_author)s
                      )
                  )?
               )
               (?P<et>            # 'et al' need not be present for either of
                  \s*[,\s]\s*
                  %(etal)s        # 'initial surname' or 'surname initial' authors
               )?
          )
      )
      (?P<ee>
          \s*[,\s]\s*
          \(?
          (?:[Ee][Dd]s|[Ee]ditors)\.?
          \)?
          [\.\,]{0,2}
      )?
      # End of all author name patterns
  
      \)?                # A possible closing bracket to finish the author group
      (?=[\s,.;:])        # Consolidate by checking we are not partially matching
                         # something else
  
      """ % {'etal': etal,
             'i_s_author': initial_surname_author,
             's_i_author': surname_initial_author,
             'ed': re_ed_notation}