code: def _remove_regions(in_file, remove_beds, ext, data):
      
      from bcbio.variation import bedutils
      out_file = "%s-%s.bed" % (utils.splitext_plus(in_file)[0], ext)
      if not utils.file_uptodate(out_file, in_file):
          with file_transaction(data, out_file) as tx_out_file:
              with bedtools_tmpdir(data):
                  if len(remove_beds) == 0:
                      to_remove = None
                  elif len(remove_beds) == 1:
                      to_remove = remove_beds[0]
                  else:
                      to_remove = "%s-all.bed" % utils.splitext_plus(tx_out_file)[0]
                      with open(to_remove, "w") as out_handle:
                          for b in remove_beds:
                              with utils.open_gzipsafe(b) as in_handle:
                                  for line in in_handle:
                                      parts = line.split("\t")
                                      out_handle.write("\t".join(parts[:4]).rstrip() + "\n")
                      if utils.file_exists(to_remove):
                          to_remove = bedutils.sort_merge(to_remove, data)
                  if to_remove and utils.file_exists(to_remove):
                      cmd = "bedtools subtract -nonamecheck -a {in_file} -b {to_remove} > {tx_out_file}"
                      do.run(cmd.format(**locals()), "Remove problematic regions: %s" % ext)
                  else:
                      utils.symlink_plus(in_file, out_file)
      return out_file
docs: Subtract a list of BED files from an input BED.
  
      General approach handling none, one and more remove_beds.